ibm-watsonx-gov 1.3.3__cp313-cp313-win_amd64.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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
- ibm_watsonx_gov/evaluators/impl/evaluate_model_risk_impl.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
- ibm_watsonx_gov/providers/detectors_provider.py +415 -0
- ibm_watsonx_gov/providers/eval_assist_provider.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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 +4 -0
|
@@ -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
|
+
# ----------------------------------------------------------------------------------------------------
|
|
@@ -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
|
+
# ----------------------------------------------------------------------------------------------------
|
|
@@ -0,0 +1,14 @@
|
|
|
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 ..entities.ai_agent import AgentRegistrationPayload, AgentUpdatePayload
|
|
11
|
+
from .ai_agent_client import (register_agent, get_agent, update_agent, delete_agent, get_agent_by_name,
|
|
12
|
+
delete_agent_with_name, list_agents)
|
|
13
|
+
from ...tools.utils.constants import (ComponentTypes, Framework, PatchOperationTypes, Categories, CustomToolType)
|
|
14
|
+
from ..utils.constants import ServiceProviderType
|
|
@@ -0,0 +1,333 @@
|
|
|
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 os
|
|
11
|
+
from typing import Union
|
|
12
|
+
|
|
13
|
+
from ibm_watsonx_gov.tools.utils import environment
|
|
14
|
+
from ...tools.utils.constants import ComponentTypes
|
|
15
|
+
from ...tools.utils.tool_utils import (get_default_inventory, get_headers,
|
|
16
|
+
get_token, process_result)
|
|
17
|
+
from ...utils.python_utils import get
|
|
18
|
+
from ...utils.rest_util import RestUtil
|
|
19
|
+
from ..entities.ai_agent import AgentRegistrationPayload, AgentUpdatePayload
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def register_agent(payload: Union[dict, AgentRegistrationPayload]):
|
|
23
|
+
"""
|
|
24
|
+
Registers a new agent by converting the provided payload to an AgentRegistrationPayload instance.
|
|
25
|
+
And then call the agent registration endpoint.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
payload (Union[dict, AgentRegistrationPayload]): The payload to register the agent.
|
|
29
|
+
It can either be a dictionary or an instance of AgentRegistrationPayload.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
dict: The processed result from the agent registration API.
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
---------
|
|
36
|
+
Using AgentRegistrationPayload model:
|
|
37
|
+
.. code-block:: python
|
|
38
|
+
|
|
39
|
+
from ibm_watsonx_gov.agent_catalog.clients import (
|
|
40
|
+
AgentRegistrationPayload,
|
|
41
|
+
register_agent,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
post_payload = {
|
|
45
|
+
"display_name": "banking agent",
|
|
46
|
+
"agent_name": "banking_agent1",
|
|
47
|
+
"description": "backing agent application",
|
|
48
|
+
"endpoint": {
|
|
49
|
+
"url": "http://localhost:8000/tools/add",
|
|
50
|
+
"headers": {
|
|
51
|
+
"Authorization": "Bearer dummy-token-12345",
|
|
52
|
+
"Content-Type": "application/json",
|
|
53
|
+
},
|
|
54
|
+
"method": "POST"
|
|
55
|
+
},
|
|
56
|
+
"service_provider_type": "wml",
|
|
57
|
+
"schema": {"properties": {"Query": {}}},
|
|
58
|
+
}
|
|
59
|
+
register_payload = AgentRegistrationPayload(**post_payload)
|
|
60
|
+
register_response = register_agent(payload=register_payload)
|
|
61
|
+
register_response
|
|
62
|
+
"""
|
|
63
|
+
if isinstance(payload, dict):
|
|
64
|
+
post_payload = AgentRegistrationPayload(**payload)
|
|
65
|
+
elif isinstance(payload, AgentRegistrationPayload):
|
|
66
|
+
post_payload = payload
|
|
67
|
+
else:
|
|
68
|
+
raise Exception(
|
|
69
|
+
"Invalid payload format. Only dict and AgentRegistrationPayload formats are allowed.")
|
|
70
|
+
if not post_payload.inventory_id:
|
|
71
|
+
post_payload.inventory_id = get_default_inventory()
|
|
72
|
+
|
|
73
|
+
payload = post_payload.model_dump(
|
|
74
|
+
mode="json", exclude_none=True, by_alias=True)
|
|
75
|
+
verify = environment.get_ssl_verification()
|
|
76
|
+
agent_post_url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components/agents"
|
|
77
|
+
headers = get_headers()
|
|
78
|
+
response = RestUtil.request_with_retry().post(
|
|
79
|
+
url=agent_post_url, json=payload, headers=headers, verify=verify)
|
|
80
|
+
return process_result(response)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def get_agent(agent_id: str, inventory_id: str):
|
|
84
|
+
"""
|
|
85
|
+
Retrieves the details of a specific agent based on the given agent ID and inventory ID.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
agent_id (str): The ID of the agent to be retrieved.
|
|
89
|
+
inventory_id (str): The ID of the inventory to fetch the agent from.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
dict: The processed result from the agent get API.
|
|
93
|
+
|
|
94
|
+
Example:
|
|
95
|
+
--------
|
|
96
|
+
.. code-block:: python
|
|
97
|
+
|
|
98
|
+
from ibm_watsonx_gov.agent_catalog.clients import get_agent
|
|
99
|
+
agent_id = '273d2b0c-dc04-407d-b3e8-2fdde790b1ed'
|
|
100
|
+
inventory_id = "81b1b891-0ded-46ca-bc3f-155e98a1xxx"
|
|
101
|
+
get_response = get_agent(agent_id=agent_id, inventory_id=inventory_id)
|
|
102
|
+
get_response
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
agent_get_url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components/agents/{agent_id}?inventory_id={inventory_id}"
|
|
106
|
+
headers = get_headers()
|
|
107
|
+
verify = environment.get_ssl_verification()
|
|
108
|
+
response = RestUtil.request_with_retry().get(url=agent_get_url, headers=headers, verify=verify)
|
|
109
|
+
return process_result(response)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def update_agent(agent_id: str, inventory_id: str, payloads: Union[list[dict], AgentUpdatePayload]):
|
|
113
|
+
"""
|
|
114
|
+
Patches the agent information based on the provided agent ID, inventory ID, and payloads.
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
agent_id (str): The ID of the agent to be patched.
|
|
118
|
+
inventory_id (str): The ID of the inventory to which the agent contains.
|
|
119
|
+
payloads (list[Union[dict, AgentUpdatePayload]]): A list of dictionaries or `AgentUpdatePayload` instances containing the update information for the agent.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
dict: The processed result from the agent patch API.
|
|
123
|
+
|
|
124
|
+
Notes:
|
|
125
|
+
- Each item in the `payloads` list should be either a dictionary or an instance of `AgentUpdatePayload`.
|
|
126
|
+
- If a dictionary is provided, it is converted into an `AgentUpdatePayload` instance.
|
|
127
|
+
|
|
128
|
+
Examples:
|
|
129
|
+
---------
|
|
130
|
+
Using AgentUpdatePayload model:
|
|
131
|
+
.. code-block:: python
|
|
132
|
+
|
|
133
|
+
from ibm_watsonx_gov.agent_catalog.clients import AgentUpdatePayload, update_agent
|
|
134
|
+
agent_id = '273d2b0c-dc04-407d-b3e8-2fdde790b1ed'
|
|
135
|
+
inventory_id = "81b1b891-0ded-46ca-bc3f-155e98a15xxx"
|
|
136
|
+
patch_payload = [
|
|
137
|
+
{"op": "replace", "path": "/reusable", "value": True},
|
|
138
|
+
{"op": "replace", "path": "/metrics", "value": {"metric_id": "64"}},
|
|
139
|
+
]
|
|
140
|
+
update_agent_payload = AgentUpdatePayload(**{"payload": patch_payload})
|
|
141
|
+
update_response = update_agent(
|
|
142
|
+
agent_id=agent_id,
|
|
143
|
+
inventory_id=inventory_id,
|
|
144
|
+
payloads=update_agent_payload,
|
|
145
|
+
)
|
|
146
|
+
update_response
|
|
147
|
+
|
|
148
|
+
"""
|
|
149
|
+
|
|
150
|
+
if isinstance(payloads, list):
|
|
151
|
+
patch_payload = AgentUpdatePayload(**{"payload": payloads})
|
|
152
|
+
elif isinstance(payloads, AgentUpdatePayload):
|
|
153
|
+
patch_payload = payloads
|
|
154
|
+
else:
|
|
155
|
+
raise TypeError(
|
|
156
|
+
f"Invalid payload type: {type(payloads)}. Expected list[dict] or AgentUpdatePayload.")
|
|
157
|
+
|
|
158
|
+
payload = patch_payload.model_dump(mode="json")['payload']
|
|
159
|
+
verify = environment.get_ssl_verification()
|
|
160
|
+
agent_patch_url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components/agents/{agent_id}?inventory_id={inventory_id}"
|
|
161
|
+
headers = get_headers()
|
|
162
|
+
response = RestUtil.request_with_retry().patch(
|
|
163
|
+
url=agent_patch_url, headers=headers, json=payload, verify=verify)
|
|
164
|
+
return process_result(response)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def delete_agent(agent_id: str, inventory_id: str):
|
|
168
|
+
"""
|
|
169
|
+
Delete the AI agent based on the agent_id and inventory_id
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
agent_id (str): The ID of the agent to be deleted.
|
|
173
|
+
inventory_id (str): The ID of the inventory to which the agent contains.
|
|
174
|
+
Returns:
|
|
175
|
+
"AI agent Deleted Successfully"
|
|
176
|
+
Example:
|
|
177
|
+
--------
|
|
178
|
+
.. code-block:: python
|
|
179
|
+
|
|
180
|
+
from ibm_watsonx_gov.agent_catalog.clients import delete_agent
|
|
181
|
+
agent_id = '273d2b0c-dc04-407d-b3e8-2fdde790b1ed'
|
|
182
|
+
inventory_id = "81b1b891-0ded-46ca-bc3f-155e98a1xxx"
|
|
183
|
+
response = delete_agent(agent_id=agent_id, inventory_id=inventory_id)
|
|
184
|
+
response
|
|
185
|
+
"""
|
|
186
|
+
|
|
187
|
+
agent_delete_url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components/agents/{agent_id}?inventory_id={inventory_id}"
|
|
188
|
+
headers = get_headers()
|
|
189
|
+
verify = environment.get_ssl_verification()
|
|
190
|
+
response = RestUtil.request_with_retry().delete(
|
|
191
|
+
url=agent_delete_url, headers=headers, verify=verify)
|
|
192
|
+
if response.text:
|
|
193
|
+
return process_result(response)
|
|
194
|
+
return "AI agent Deleted Successfully"
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def list_agents(service_provider_type: Union[list[str], str] = None, category: Union[list[str], str] = None,
|
|
198
|
+
inventory_id: Union[list[str], str] = None, framework: Union[list[str], str] = None,
|
|
199
|
+
agent_name: Union[list[str], str] = None, search_text: Union[list[str], str] = None,
|
|
200
|
+
offset: int = None, limit: int = None):
|
|
201
|
+
"""
|
|
202
|
+
Retrieves a list of registered AI agents based on the provided filter criteria.
|
|
203
|
+
|
|
204
|
+
All parameters are optional. If no filters are provided, all agents will be listed.
|
|
205
|
+
|
|
206
|
+
Args:
|
|
207
|
+
service_provider_type (Union[list[str], str], optional): Filter agents by one or more service provider types.
|
|
208
|
+
category (Union[list[str], str], optional): Filter agents by one or more categories.
|
|
209
|
+
inventory_id (Union[list[str], str], optional): Filter agents by one or more inventory IDs.
|
|
210
|
+
framework (Union[list[str], str], optional): Filter agents by one or more frameworks (e.g., "langchain").
|
|
211
|
+
agent_name (Union[list[str], str], optional): Filter agents by one or more agent names.
|
|
212
|
+
search_text (Union[List[str], str], optional): Filters agent based on matching keywords.
|
|
213
|
+
offset (int, optional): The starting index of the agents to display
|
|
214
|
+
limit (int, optional): The maximum number of agents to display
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
dict: A list of agents matching the filter criteria.
|
|
218
|
+
|
|
219
|
+
Examples:
|
|
220
|
+
---------
|
|
221
|
+
.. code-block:: python
|
|
222
|
+
|
|
223
|
+
from ibm_watsonx_gov.agent_catalog.clients import list_agents
|
|
224
|
+
response = list_agents(agent_name=["banking_agent1"])
|
|
225
|
+
response
|
|
226
|
+
"""
|
|
227
|
+
component_type = ComponentTypes.AI_AGENT.value
|
|
228
|
+
|
|
229
|
+
parms = {}
|
|
230
|
+
if component_type:
|
|
231
|
+
parms["component_type"] = ",".join(component_type) if isinstance(
|
|
232
|
+
component_type, list) else component_type
|
|
233
|
+
if service_provider_type:
|
|
234
|
+
parms["service_provider_type"] = ",".join(service_provider_type) if isinstance(service_provider_type,
|
|
235
|
+
list) else service_provider_type
|
|
236
|
+
if category:
|
|
237
|
+
parms["category"] = ",".join(category) if isinstance(
|
|
238
|
+
category, list) else category
|
|
239
|
+
if inventory_id:
|
|
240
|
+
parms["inventory_id"] = ",".join(inventory_id) if isinstance(
|
|
241
|
+
inventory_id, list) else inventory_id
|
|
242
|
+
if framework:
|
|
243
|
+
parms["framework"] = ",".join(framework) if isinstance(
|
|
244
|
+
framework, list) else framework
|
|
245
|
+
if agent_name:
|
|
246
|
+
parms["asset_name"] = ",".join(agent_name) if isinstance(
|
|
247
|
+
agent_name, list) else agent_name
|
|
248
|
+
if search_text:
|
|
249
|
+
parms["match_text"] = ",".join(search_text) if isinstance(
|
|
250
|
+
search_text, list) else search_text
|
|
251
|
+
if offset:
|
|
252
|
+
parms["offset"] = offset
|
|
253
|
+
if limit:
|
|
254
|
+
parms["limit"] = limit
|
|
255
|
+
|
|
256
|
+
agent_list_url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components"
|
|
257
|
+
headers = get_headers()
|
|
258
|
+
verify = environment.get_ssl_verification()
|
|
259
|
+
response = RestUtil.request_with_retry().get(
|
|
260
|
+
url=agent_list_url, headers=headers, params=parms, verify=verify)
|
|
261
|
+
return process_result(response)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def get_agent_by_name(agent_name: str, inventory_id: str = None):
|
|
265
|
+
"""
|
|
266
|
+
Method to retrieve agent information based on the agent name within the current inventory ID.
|
|
267
|
+
|
|
268
|
+
Args:
|
|
269
|
+
agent_name (str): Name of the agent
|
|
270
|
+
inventory_id (str, optional): Inventory id
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
dict: Returns the agent details based on the agent name.
|
|
274
|
+
|
|
275
|
+
Example:
|
|
276
|
+
--------
|
|
277
|
+
.. code-block:: python
|
|
278
|
+
|
|
279
|
+
from ibm_watsonx_gov.agent_catalog.clients import get_agent_by_name
|
|
280
|
+
response = get_agent_by_name("banking_agent1")
|
|
281
|
+
response
|
|
282
|
+
|
|
283
|
+
"""
|
|
284
|
+
# Get the agent details using agent name
|
|
285
|
+
agent_details = (
|
|
286
|
+
list_agents
|
|
287
|
+
(
|
|
288
|
+
agent_name=agent_name,
|
|
289
|
+
inventory_id=inventory_id
|
|
290
|
+
)
|
|
291
|
+
)
|
|
292
|
+
if len(agent_details['agents']) > 0:
|
|
293
|
+
agent_id = get(agent_details['agents'][0], "metadata.id")
|
|
294
|
+
if inventory_id is None:
|
|
295
|
+
inventory_id = get(
|
|
296
|
+
agent_details['agents'][0], "entity.inventory_id")
|
|
297
|
+
|
|
298
|
+
# Now retain agent information using agent_id and inventory_id
|
|
299
|
+
get_response = get_agent(agent_id, inventory_id)
|
|
300
|
+
return get_response
|
|
301
|
+
raise Exception(f"You don't have any agent with agent_name: {agent_name}")
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
def delete_agent_with_name(agent_name: str, inventory_id: str = None):
|
|
305
|
+
"""
|
|
306
|
+
Method to delete the agent with agent_name
|
|
307
|
+
|
|
308
|
+
Args:
|
|
309
|
+
agent_name (str): Name of the agent
|
|
310
|
+
inventory_id (str, Optional) Inventory_id
|
|
311
|
+
|
|
312
|
+
Example:
|
|
313
|
+
--------
|
|
314
|
+
.. code-block:: python
|
|
315
|
+
|
|
316
|
+
from ibm_watsonx_gov.agent_catalog.clients import delete_agent_with_name
|
|
317
|
+
response = delete_agent_with_name("banking_agent1")
|
|
318
|
+
response
|
|
319
|
+
"""
|
|
320
|
+
# Get the agent details using agent name
|
|
321
|
+
agent_details = list_agents(
|
|
322
|
+
agent_name=agent_name, inventory_id=inventory_id)
|
|
323
|
+
if len(agent_details["agents"]) > 0:
|
|
324
|
+
agent_id = get(agent_details['agents'][0], "metadata.id")
|
|
325
|
+
if inventory_id is None:
|
|
326
|
+
inventory_id = get(
|
|
327
|
+
agent_details['agents'][0], "entity.inventory_id")
|
|
328
|
+
|
|
329
|
+
# Now deleting agent information using agent_id and inventory_id
|
|
330
|
+
delete_agent(agent_id=agent_id, inventory_id=inventory_id)
|
|
331
|
+
return f"The agent with agent_name: {agent_name} was deleted successfully."
|
|
332
|
+
raise Exception(f"You don't have any agent with agent_name: {agent_name}")
|
|
333
|
+
|
|
@@ -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
|
+
# ----------------------------------------------------------------------------------------------------
|
|
@@ -0,0 +1,202 @@
|
|
|
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 ast
|
|
11
|
+
from typing import Callable, Dict, Set, Union
|
|
12
|
+
|
|
13
|
+
import pandas as pd
|
|
14
|
+
from ibm_watsonx_gov.agent_catalog.core.agents import (AgentInterface,
|
|
15
|
+
LangChainAgent,
|
|
16
|
+
LangGraphAgent,
|
|
17
|
+
RestAgent)
|
|
18
|
+
from ibm_watsonx_gov.tools.utils.python_utils import get_base64_decoding
|
|
19
|
+
from ibm_watsonx_gov.utils.python_utils import get
|
|
20
|
+
|
|
21
|
+
from ..clients.ai_agent_client import get_agent_by_name
|
|
22
|
+
from ..utils.constants import AgentType, Framework, ServiceProviderType
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def load_agent(agent_name: str, **kwargs) -> AgentInterface:
|
|
26
|
+
"""
|
|
27
|
+
Loads the agent based on agent name and framework information
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
agent_name: Agent name
|
|
31
|
+
Returns:
|
|
32
|
+
AgentInterface: The agent instance
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
-------
|
|
36
|
+
1. Basic example to load an agent
|
|
37
|
+
.. code-block:: python
|
|
38
|
+
|
|
39
|
+
from ibm_watsonx_gov.agent_catalog.core.agent_loader import load_agent
|
|
40
|
+
import json
|
|
41
|
+
|
|
42
|
+
agent = load_agent(agent_name="<AGENT_NAME>")
|
|
43
|
+
response = agent.invoke({"<PLACE_HOLDER_NAME>": "<PLACE_HOLDER_VALUE>"})
|
|
44
|
+
response["result"]
|
|
45
|
+
|
|
46
|
+
2. Example of agent loading that expects headers
|
|
47
|
+
.. code-block:: python
|
|
48
|
+
|
|
49
|
+
from ibm_watsonx_gov.agent_catalog.core.agent_loader import load_agent
|
|
50
|
+
|
|
51
|
+
headers = {
|
|
52
|
+
"Authorization":"Bearer __TOKEN__" # Need to supply dynamic headers
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
agent = load_agent(agent_name="<AGENT_NAME>", headers=headers)
|
|
56
|
+
response = agent.invoke({"<PLACE_HOLDER_NAME>": "<PLACE_HOLDER_VALUE>"})
|
|
57
|
+
response["result"]
|
|
58
|
+
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
agent_details = get_agent_by_name(agent_name=agent_name)
|
|
62
|
+
|
|
63
|
+
# Get service provider type
|
|
64
|
+
service_provider_type = get(agent_details, "entity.service_provider_type")
|
|
65
|
+
agent_name = get(agent_details, "entity.agent_name")
|
|
66
|
+
agent_type = get(agent_details, "entity.agent_type")
|
|
67
|
+
|
|
68
|
+
# Load the agent based on the service provider type
|
|
69
|
+
try:
|
|
70
|
+
if service_provider_type == ServiceProviderType.CUSTOM.value:
|
|
71
|
+
|
|
72
|
+
framework = get(agent_details, "entity.framework")
|
|
73
|
+
if agent_type == AgentType.CODE.value and Framework.LANGGRAPH.value in framework:
|
|
74
|
+
# This is a code based agent
|
|
75
|
+
agent_encode_code = get(
|
|
76
|
+
agent_details, "entity.code.source_code_base64")
|
|
77
|
+
|
|
78
|
+
agent_graph = _get_agent_instance(agent_encode_code)
|
|
79
|
+
return LangGraphAgent(agent_graph, **kwargs)
|
|
80
|
+
|
|
81
|
+
elif agent_type == AgentType.CODE.value and Framework.LANGCHAIN.value in framework:
|
|
82
|
+
# This is a code based agent
|
|
83
|
+
agent_encode_code = get(
|
|
84
|
+
agent_details, "entity.code.source_code_base64")
|
|
85
|
+
|
|
86
|
+
agent_instance = _get_agent_instance(agent_encode_code)
|
|
87
|
+
|
|
88
|
+
return LangChainAgent(agent_instance, **kwargs)
|
|
89
|
+
|
|
90
|
+
elif agent_type == AgentType.ENDPOINT.value:
|
|
91
|
+
|
|
92
|
+
endpoint = get(agent_details, "entity.endpoint.url")
|
|
93
|
+
method = get(agent_details, "entity.endpoint.method")
|
|
94
|
+
agent_headers = get(agent_details, "entity.endpoint.headers", {})
|
|
95
|
+
input_headers = kwargs.get("headers", {})
|
|
96
|
+
headers = agent_headers | input_headers
|
|
97
|
+
|
|
98
|
+
return RestAgent(endpoint, headers, method, **kwargs)
|
|
99
|
+
|
|
100
|
+
if service_provider_type == ServiceProviderType.WML.value:
|
|
101
|
+
from ...tools.utils.tool_utils import get_token
|
|
102
|
+
|
|
103
|
+
endpoint = get(agent_details, "entity.endpoint.url")
|
|
104
|
+
method = get(agent_details, "entity.endpoint.method")
|
|
105
|
+
agent_headers = get(agent_details, "entity.endpoint.headers", {})
|
|
106
|
+
auth_token = get_token()
|
|
107
|
+
agent_headers.update({"Authorization": "Bearer "+ auth_token})
|
|
108
|
+
|
|
109
|
+
arg_headers = kwargs.get("headers", {})
|
|
110
|
+
input_headers = agent_headers | arg_headers
|
|
111
|
+
|
|
112
|
+
return RestAgent(endpoint, input_headers, method)
|
|
113
|
+
|
|
114
|
+
except Exception as ex:
|
|
115
|
+
raise Exception(f"Error loading agent {agent_name}. Details:{str(ex)}")
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def invoke(agent: AgentInterface, input_data: dict) -> dict:
|
|
119
|
+
"""
|
|
120
|
+
Executes the agent that implements AgentInterface.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
agent (AgentInterface): The agent instance to invoke.
|
|
124
|
+
input_data (dict): Input to pass to the agent.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
dict: Output from the agent.
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
return agent.invoke(input_data)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def get_agent_input_data_from_schema(schema: dict):
|
|
134
|
+
|
|
135
|
+
"""
|
|
136
|
+
Generates the input data based on the schema
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
schema (dict): agent schema.
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
str: Input data to pass to the agent.
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
schema_type = schema.get("type")
|
|
146
|
+
|
|
147
|
+
if schema_type == "object":
|
|
148
|
+
properties = schema.get("properties", {})
|
|
149
|
+
required = schema.get("required", [])
|
|
150
|
+
result = {}
|
|
151
|
+
for key, prop_schema in properties.items():
|
|
152
|
+
result[key] = get_agent_input_data_from_schema(prop_schema)
|
|
153
|
+
|
|
154
|
+
return result
|
|
155
|
+
|
|
156
|
+
elif schema_type == "array":
|
|
157
|
+
item_schema = schema.get("items", {})
|
|
158
|
+
return [get_agent_input_data_from_schema(item_schema)]
|
|
159
|
+
|
|
160
|
+
elif schema_type == "string":
|
|
161
|
+
return "<string value>"
|
|
162
|
+
|
|
163
|
+
elif schema_type in ["float","double"]:
|
|
164
|
+
return "<float/double value>"
|
|
165
|
+
|
|
166
|
+
elif schema_type in ["integer","number"]:
|
|
167
|
+
return "<integer value>"
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
elif schema_type == "boolean":
|
|
171
|
+
return "<boolean value>"
|
|
172
|
+
|
|
173
|
+
else:
|
|
174
|
+
return None
|
|
175
|
+
|
|
176
|
+
def _get_agent_instance(agent_encoded_code: str) -> object:
|
|
177
|
+
"""
|
|
178
|
+
Dynamically parses, compiles, and executes python agent code from a string,
|
|
179
|
+
and returns the result of calling the main agent function.
|
|
180
|
+
|
|
181
|
+
Assumes the agent code string defines at least one function, with the
|
|
182
|
+
last function in the code being the one to execute.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
agent_encoded_code (str): encoded code
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
object: The result of executing the main agent function.
|
|
189
|
+
"""
|
|
190
|
+
|
|
191
|
+
agent_decode_code = get_base64_decoding(agent_encoded_code)
|
|
192
|
+
|
|
193
|
+
tree = ast.parse(agent_decode_code, mode="exec")
|
|
194
|
+
tree_len = len(tree.body)
|
|
195
|
+
## get main agent function name
|
|
196
|
+
function_name = tree.body[tree_len-1].name
|
|
197
|
+
|
|
198
|
+
namespace = {}
|
|
199
|
+
exec(agent_decode_code, namespace)
|
|
200
|
+
compiled_agent = namespace[function_name]()
|
|
201
|
+
|
|
202
|
+
return compiled_agent
|