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,237 @@
|
|
|
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, Union
|
|
12
|
+
|
|
13
|
+
import pandas as pd
|
|
14
|
+
from langchain_core.tools import StructuredTool
|
|
15
|
+
from pydantic import BaseModel
|
|
16
|
+
|
|
17
|
+
from ibm_watsonx_gov.utils.python_utils import get
|
|
18
|
+
|
|
19
|
+
from ..clients import get_tool_info
|
|
20
|
+
from ..utils import (TOOL_REGISTRY, get_base64_decoding, get_pydantic_model,
|
|
21
|
+
validate_envs)
|
|
22
|
+
from ..utils.constants import CustomToolType, ServiceProviderType
|
|
23
|
+
from ..utils.package_utils import install_and_import_packages
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def load_tool(tool_name: str, **kwargs):
|
|
27
|
+
"""
|
|
28
|
+
Method to load a tool based on tool name and other parameters
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
tool_name(str) :
|
|
32
|
+
Name of the registered tool
|
|
33
|
+
headers(Optional[headers]):
|
|
34
|
+
- Dynamic headers to be supplied to the tool
|
|
35
|
+
- If the user supplies static headers (whose value do not change) no need of supplying this header while loading.
|
|
36
|
+
- User is expected to provide the information related to dynamic headers while tool loading . Types of dynamic headers
|
|
37
|
+
- If the tool is registered with header value $DYNAMIC HEADERS it is mandatory to supply the information while tool loading
|
|
38
|
+
- If the tool is registered with convention `headers_key: $header_key` this information should be supplied as part of environment
|
|
39
|
+
**kwargs:
|
|
40
|
+
Optional configuration based on the tool .(Eg: Configuration properties for OOTB tool)
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
Tool : A Langchain/Langgraph compatible tool object
|
|
44
|
+
|
|
45
|
+
Examples:
|
|
46
|
+
-------
|
|
47
|
+
1. Basic example to load a tool
|
|
48
|
+
.. code-block:: python
|
|
49
|
+
|
|
50
|
+
from ibm_watsonx_gov.tools import load_tool
|
|
51
|
+
tool = load_tool(tool_name=<TOOL_NAME>)
|
|
52
|
+
|
|
53
|
+
2. Example of tool loading that expects configuration
|
|
54
|
+
.. code-block:: python
|
|
55
|
+
|
|
56
|
+
from ibm_watsonx_gov.tools import load_tool
|
|
57
|
+
from ibm_watsonx_gov.tools.clients import get_tool_info
|
|
58
|
+
|
|
59
|
+
tool_details = get_tool_info(tool_name=<TOOL_NAME>)
|
|
60
|
+
tool_config = tool_details.get("entity").get("config)
|
|
61
|
+
config = {
|
|
62
|
+
<Provide the properties as per the details in tool config>
|
|
63
|
+
}
|
|
64
|
+
tool = load_tool(tool_name=<TOOL_NAME>,**config)
|
|
65
|
+
|
|
66
|
+
3. Example of tool loading that expects headers
|
|
67
|
+
.. code-block:: python
|
|
68
|
+
|
|
69
|
+
from ibm_watsonx_gov.tools import load_tool
|
|
70
|
+
from ibm_watsonx_gov.tools.clients import get_tool_info
|
|
71
|
+
|
|
72
|
+
tool_details = get_tool_info(tool_name=<TOOL_NAME>)
|
|
73
|
+
headers = tool_details.get("entity").get("endpoint").get("headers")
|
|
74
|
+
|
|
75
|
+
headers = {
|
|
76
|
+
"Authorization":"Bearer __TOKEN__" #Need to supply dynamic headers
|
|
77
|
+
}
|
|
78
|
+
tool = load_tool(tool_name=<TOOL_NAME>,headers=headers)
|
|
79
|
+
"""
|
|
80
|
+
# Get the tool information
|
|
81
|
+
tool_details = get_tool_info(tool_name=tool_name)
|
|
82
|
+
|
|
83
|
+
# Get service provider type
|
|
84
|
+
service_provider_type = get(tool_details, "entity.service_provider_type")
|
|
85
|
+
tool_name = get(tool_details, "entity.tool_name")
|
|
86
|
+
env_list = get(tool_details, "entity.environment_variables", [])
|
|
87
|
+
|
|
88
|
+
# Validate the env for loading the tool
|
|
89
|
+
validate_envs(env_list)
|
|
90
|
+
|
|
91
|
+
# Load the tool based on the service provider type
|
|
92
|
+
try:
|
|
93
|
+
if service_provider_type == ServiceProviderType.CUSTOM.value:
|
|
94
|
+
tool_description = get(tool_details, "entity.description")
|
|
95
|
+
tool_schema = get(tool_details, "entity.schema")
|
|
96
|
+
tool_type = get(tool_details, "entity.tool_type")
|
|
97
|
+
dependencies = get(
|
|
98
|
+
tool_details, "entity.dependencies.run_time_packages")
|
|
99
|
+
if len(dependencies) > 0:
|
|
100
|
+
dependencies = [package for package in dependencies if not package.startswith(
|
|
101
|
+
"ibm-watsonx-gov")]
|
|
102
|
+
install_and_import_packages(dependencies)
|
|
103
|
+
|
|
104
|
+
if tool_type == CustomToolType.CODE.value:
|
|
105
|
+
# This is a code based tool
|
|
106
|
+
encode_tool_code = get(
|
|
107
|
+
tool_details, "entity.code.source_code_base64")
|
|
108
|
+
tool_code = get_base64_decoding(encode_tool_code)
|
|
109
|
+
return _load_custom_tool(tool_name,
|
|
110
|
+
tool_description,
|
|
111
|
+
tool_code,
|
|
112
|
+
tool_schema,
|
|
113
|
+
**kwargs)
|
|
114
|
+
elif tool_type == CustomToolType.ENDPOINT.value:
|
|
115
|
+
tool_endpoint = get(tool_details, "entity.endpoint.url")
|
|
116
|
+
headers = get(tool_details, "entity.endpoint.headers", {})
|
|
117
|
+
arg_headers = kwargs.get("headers", {})
|
|
118
|
+
tool_headers = headers | arg_headers
|
|
119
|
+
method = get(tool_details, "entity.endpoint.method", "POST")
|
|
120
|
+
return _load_restapi_tool(tool_name,
|
|
121
|
+
tool_description,
|
|
122
|
+
tool_endpoint,
|
|
123
|
+
tool_schema,
|
|
124
|
+
tool_headers,
|
|
125
|
+
method=method)
|
|
126
|
+
elif service_provider_type == ServiceProviderType.IBM.value:
|
|
127
|
+
return _load_ootb_tool(tool_name, **kwargs)
|
|
128
|
+
else:
|
|
129
|
+
raise Exception(
|
|
130
|
+
f"service_provide_type:{service_provider_type} is not supporteds. Acceptable values:{ServiceProviderType.values()}")
|
|
131
|
+
except Exception as ex:
|
|
132
|
+
raise Exception(f"Error loading tool {tool_name}. Details:{str(ex)}")
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _load_ootb_tool(tool_name: str = None, **kwargs) -> Callable:
|
|
136
|
+
"""
|
|
137
|
+
Load the OOTB tool using the tool name
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
tool_name (str): Name of the OOTB tool
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
Callable: OOTB Tool loaded from the tool registry
|
|
144
|
+
"""
|
|
145
|
+
if tool_name is None:
|
|
146
|
+
raise Exception("'tool_name' parameter is missing.")
|
|
147
|
+
|
|
148
|
+
tool_class_path = TOOL_REGISTRY.get(tool_name, None)
|
|
149
|
+
if tool_class_path is None:
|
|
150
|
+
raise Exception(f"OOTB tool {tool_name} is not available")
|
|
151
|
+
|
|
152
|
+
module_path, _, class_name = tool_class_path.rpartition('.')
|
|
153
|
+
tool_module = __import__(module_path, fromlist=[f"{class_name}"])
|
|
154
|
+
|
|
155
|
+
return getattr(tool_module, class_name)(**kwargs)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _load_custom_tool(tool_name: str,
|
|
159
|
+
tool_description: str,
|
|
160
|
+
tool_code: str,
|
|
161
|
+
tool_schema: dict,
|
|
162
|
+
**kwargs) -> Callable:
|
|
163
|
+
"""Method to create custom tool
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
tool_name (str): Name of the agent tool
|
|
167
|
+
tool_description (str): Description of agent tool
|
|
168
|
+
tool_code (str): Tool code in the form of doc string
|
|
169
|
+
tool_schema (dict): JSON args schema to be supplied for converting tool
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
Callable: Custom tool created using the tool code
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
def call_tool(**kwargs):
|
|
176
|
+
tree = ast.parse(tool_code, mode="exec")
|
|
177
|
+
function_name = tree.body[0].name
|
|
178
|
+
compiled_code = compile(tree, 'custom_tool', 'exec')
|
|
179
|
+
namespace = {}
|
|
180
|
+
exec(compiled_code, namespace)
|
|
181
|
+
return namespace[function_name](**kwargs)
|
|
182
|
+
|
|
183
|
+
title = tool_name + \
|
|
184
|
+
"_schema" if tool_schema.get(
|
|
185
|
+
'title') is None else tool_schema.get('title')
|
|
186
|
+
|
|
187
|
+
tool = StructuredTool(
|
|
188
|
+
name=tool_name,
|
|
189
|
+
description=tool_description,
|
|
190
|
+
func=call_tool,
|
|
191
|
+
args_schema=get_pydantic_model(title, tool_schema)
|
|
192
|
+
)
|
|
193
|
+
return tool
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def _load_restapi_tool(tool_name: str,
|
|
197
|
+
tool_description: str,
|
|
198
|
+
tool_endpoint: str,
|
|
199
|
+
tool_schema: Union[dict, BaseModel],
|
|
200
|
+
headers: dict = {},
|
|
201
|
+
method='POST') -> Callable:
|
|
202
|
+
"""Method to create custom tool
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
tool_name (str): Name of the agent tool
|
|
206
|
+
tool_description (str): Description of the agent tool
|
|
207
|
+
tool_endpoint (str): RestEndpoint to be used as a tool
|
|
208
|
+
tool_schema (Union[dict, BaseModel]): Tool schema
|
|
209
|
+
headers (dict,optional): Headers to be used while calling the tool .Defaults to {}
|
|
210
|
+
method (str, optional): _description_. Defaults to 'POST'.
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
Callable: RESTAPI tool created using the template tool
|
|
214
|
+
"""
|
|
215
|
+
from ..rest_api import RestApiTool, load_headers
|
|
216
|
+
if isinstance(tool_schema, dict):
|
|
217
|
+
|
|
218
|
+
title = tool_name + \
|
|
219
|
+
"_schema" if tool_schema.get(
|
|
220
|
+
'title') is None else tool_schema.get('title')
|
|
221
|
+
|
|
222
|
+
args_schema = get_pydantic_model(title, tool_schema)
|
|
223
|
+
else:
|
|
224
|
+
args_schema = tool_schema
|
|
225
|
+
|
|
226
|
+
# Load headers with envs as needed
|
|
227
|
+
headers = load_headers(tool_name, headers)
|
|
228
|
+
|
|
229
|
+
tool = RestApiTool(
|
|
230
|
+
name=tool_name,
|
|
231
|
+
description=tool_description,
|
|
232
|
+
endpoint=tool_endpoint,
|
|
233
|
+
method=method,
|
|
234
|
+
headers=headers,
|
|
235
|
+
args_schema=args_schema
|
|
236
|
+
)
|
|
237
|
+
return tool
|
|
@@ -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,435 @@
|
|
|
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 Annotated, Any, Dict, List, Optional
|
|
11
|
+
|
|
12
|
+
from pydantic import BaseModel, Field, model_validator
|
|
13
|
+
from pydantic_core import PydanticCustomError
|
|
14
|
+
|
|
15
|
+
from ..utils.constants import (Categories, CustomToolType, Framework,
|
|
16
|
+
PatchOperationTypes, ServiceProviderType)
|
|
17
|
+
from ..utils.python_utils import get_base64_encoding
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class AIToolRuntimeDetails(BaseModel):
|
|
21
|
+
engine: Annotated[
|
|
22
|
+
str,
|
|
23
|
+
Field(
|
|
24
|
+
...,
|
|
25
|
+
description="Python version required by the tool."
|
|
26
|
+
)
|
|
27
|
+
]
|
|
28
|
+
cpu_capacity: Annotated[
|
|
29
|
+
Optional[str],
|
|
30
|
+
Field(
|
|
31
|
+
default=None,
|
|
32
|
+
description="CPU capacity required by the tool."
|
|
33
|
+
)
|
|
34
|
+
]
|
|
35
|
+
memory: Annotated[
|
|
36
|
+
Optional[str],
|
|
37
|
+
Field(
|
|
38
|
+
default=None,
|
|
39
|
+
description="Memory required by the tool."
|
|
40
|
+
)
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class AIToolCodePayload(BaseModel):
|
|
45
|
+
source: Annotated[
|
|
46
|
+
Optional[str],
|
|
47
|
+
Field(
|
|
48
|
+
default=None,
|
|
49
|
+
description="Source location of the tool's code."
|
|
50
|
+
)
|
|
51
|
+
]
|
|
52
|
+
commit: Annotated[
|
|
53
|
+
Optional[str],
|
|
54
|
+
Field(
|
|
55
|
+
default=None
|
|
56
|
+
)
|
|
57
|
+
]
|
|
58
|
+
language: Annotated[
|
|
59
|
+
Optional[str],
|
|
60
|
+
Field(
|
|
61
|
+
default="python",
|
|
62
|
+
description="Language used in the code"
|
|
63
|
+
)
|
|
64
|
+
]
|
|
65
|
+
source_code_url: Annotated[
|
|
66
|
+
Optional[str],
|
|
67
|
+
Field(
|
|
68
|
+
default=None,
|
|
69
|
+
description="Remote URL for accessing the source code. Currently, only GitHub URLs are supported."
|
|
70
|
+
)
|
|
71
|
+
]
|
|
72
|
+
source_code_base64: Annotated[
|
|
73
|
+
Optional[str],
|
|
74
|
+
Field(
|
|
75
|
+
...,
|
|
76
|
+
description="Source code for invoking the tool.",
|
|
77
|
+
)
|
|
78
|
+
]
|
|
79
|
+
run_time_details: Annotated[
|
|
80
|
+
Optional[AIToolRuntimeDetails],
|
|
81
|
+
Field(
|
|
82
|
+
...,
|
|
83
|
+
description="Runtime details required for executing the source code."
|
|
84
|
+
)
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
@model_validator(mode='before')
|
|
88
|
+
@classmethod
|
|
89
|
+
def accept_multiple_field_names(cls, data):
|
|
90
|
+
if "source_code" in data and "source_code_base64" not in data:
|
|
91
|
+
data["source_code_base64"] = data["source_code"]
|
|
92
|
+
return data
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class AIToolEndpointPayload(BaseModel):
|
|
96
|
+
url: Annotated[
|
|
97
|
+
str,
|
|
98
|
+
Field(
|
|
99
|
+
...,
|
|
100
|
+
description="URL to access the endpoint."
|
|
101
|
+
)
|
|
102
|
+
]
|
|
103
|
+
method: Annotated[
|
|
104
|
+
str,
|
|
105
|
+
Field(
|
|
106
|
+
...,
|
|
107
|
+
description="Method to access the endpoint."
|
|
108
|
+
)
|
|
109
|
+
]
|
|
110
|
+
headers: Annotated[
|
|
111
|
+
Dict[str, Any],
|
|
112
|
+
Field(
|
|
113
|
+
...,
|
|
114
|
+
description="Headers required to call the endpoint."
|
|
115
|
+
)
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class AIToolUsedInApplication(BaseModel):
|
|
120
|
+
inventory_id: Annotated[
|
|
121
|
+
str,
|
|
122
|
+
Field(
|
|
123
|
+
...,
|
|
124
|
+
description="Inventory ID of the application where the tool is used."
|
|
125
|
+
)
|
|
126
|
+
]
|
|
127
|
+
agent_asset_id: Annotated[
|
|
128
|
+
str,
|
|
129
|
+
Field(
|
|
130
|
+
...,
|
|
131
|
+
description="Agent ID of the application where the tool is used."
|
|
132
|
+
)
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class AIToolDependencies(BaseModel):
|
|
137
|
+
remote_services: Annotated[
|
|
138
|
+
list[str],
|
|
139
|
+
Field(
|
|
140
|
+
default=None,
|
|
141
|
+
)
|
|
142
|
+
]
|
|
143
|
+
run_time_packages: Annotated[
|
|
144
|
+
list[str],
|
|
145
|
+
Field(
|
|
146
|
+
default=None,
|
|
147
|
+
)
|
|
148
|
+
]
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class AIToolBenchmark(BaseModel):
|
|
152
|
+
avg_latency: Annotated[
|
|
153
|
+
str,
|
|
154
|
+
Field(
|
|
155
|
+
default=None,
|
|
156
|
+
)]
|
|
157
|
+
dataset: Annotated[
|
|
158
|
+
str,
|
|
159
|
+
Field(
|
|
160
|
+
...,
|
|
161
|
+
description="GitHub URL for the dataset."
|
|
162
|
+
)]
|
|
163
|
+
records: Annotated[
|
|
164
|
+
int,
|
|
165
|
+
Field(
|
|
166
|
+
...,
|
|
167
|
+
description="Number of records contained in the dataset."
|
|
168
|
+
)]
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class AIToolSchema(BaseModel):
|
|
172
|
+
title: Annotated[
|
|
173
|
+
Optional[str],
|
|
174
|
+
Field(
|
|
175
|
+
default=None,
|
|
176
|
+
description="Title for schema."
|
|
177
|
+
)]
|
|
178
|
+
type: Annotated[
|
|
179
|
+
Optional[str],
|
|
180
|
+
Field(
|
|
181
|
+
default=None,
|
|
182
|
+
description="Type of schema."
|
|
183
|
+
)]
|
|
184
|
+
properties: Annotated[
|
|
185
|
+
dict,
|
|
186
|
+
Field(
|
|
187
|
+
...,
|
|
188
|
+
description="Properties for schema."
|
|
189
|
+
)]
|
|
190
|
+
required: Annotated[
|
|
191
|
+
Optional[list],
|
|
192
|
+
Field(
|
|
193
|
+
default=None,
|
|
194
|
+
description="Required for schema."
|
|
195
|
+
)]
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
class ToolRegistrationPayload(BaseModel):
|
|
199
|
+
tool_name: Annotated[
|
|
200
|
+
str,
|
|
201
|
+
Field(
|
|
202
|
+
...,
|
|
203
|
+
description="Unique name for the tool"
|
|
204
|
+
)
|
|
205
|
+
]
|
|
206
|
+
display_name: Annotated[
|
|
207
|
+
Optional[str],
|
|
208
|
+
Field(
|
|
209
|
+
default=None,
|
|
210
|
+
description="Unique name for displaying the tool."
|
|
211
|
+
)
|
|
212
|
+
]
|
|
213
|
+
service_provider_type: Annotated[
|
|
214
|
+
Optional[ServiceProviderType],
|
|
215
|
+
Field(
|
|
216
|
+
default=ServiceProviderType.CUSTOM,
|
|
217
|
+
description=f"Service provider type. Allowed values are: {ServiceProviderType.values()}."
|
|
218
|
+
)
|
|
219
|
+
]
|
|
220
|
+
tool_type: Annotated[
|
|
221
|
+
Optional[CustomToolType],
|
|
222
|
+
Field(
|
|
223
|
+
default=CustomToolType.CODE,
|
|
224
|
+
description=f"Type of the tool. Allowed tool types are: {CustomToolType.values()}."
|
|
225
|
+
)
|
|
226
|
+
]
|
|
227
|
+
description: Annotated[
|
|
228
|
+
str,
|
|
229
|
+
Field(
|
|
230
|
+
...,
|
|
231
|
+
description="Short description about the tool."
|
|
232
|
+
)
|
|
233
|
+
]
|
|
234
|
+
summary: Annotated[
|
|
235
|
+
Optional[str],
|
|
236
|
+
Field(
|
|
237
|
+
default=None,
|
|
238
|
+
description="Summary of the tool."
|
|
239
|
+
)
|
|
240
|
+
]
|
|
241
|
+
development_uri_link: Annotated[
|
|
242
|
+
Optional[str],
|
|
243
|
+
Field(
|
|
244
|
+
default=None
|
|
245
|
+
)
|
|
246
|
+
]
|
|
247
|
+
inventory_id: Annotated[
|
|
248
|
+
Optional[str],
|
|
249
|
+
Field(
|
|
250
|
+
default=None,
|
|
251
|
+
description="Inventory ID in which the asset needs to be created."
|
|
252
|
+
)
|
|
253
|
+
]
|
|
254
|
+
reusable: Annotated[
|
|
255
|
+
bool,
|
|
256
|
+
Field(
|
|
257
|
+
default=True,
|
|
258
|
+
description="Specify the tool will be reusable."
|
|
259
|
+
)
|
|
260
|
+
]
|
|
261
|
+
framework: Annotated[
|
|
262
|
+
list[Framework],
|
|
263
|
+
Field(
|
|
264
|
+
default_factory=lambda: [Framework.LANGCHAIN, Framework.LANGGRAPH],
|
|
265
|
+
description="Specify the framework used by the tool."
|
|
266
|
+
)
|
|
267
|
+
]
|
|
268
|
+
category: Annotated[
|
|
269
|
+
List[Categories],
|
|
270
|
+
Field(
|
|
271
|
+
default_factory=lambda: [Categories.OTHER],
|
|
272
|
+
description=f"Specify the category under which the tool will be classified. Allowed values are {Categories.values()}."
|
|
273
|
+
)
|
|
274
|
+
]
|
|
275
|
+
used_in_applications: Annotated[
|
|
276
|
+
Optional[List[AIToolUsedInApplication]],
|
|
277
|
+
Field(
|
|
278
|
+
default=None,
|
|
279
|
+
description="List of applications where this tool is used."
|
|
280
|
+
)
|
|
281
|
+
]
|
|
282
|
+
code: Annotated[
|
|
283
|
+
Optional[AIToolCodePayload],
|
|
284
|
+
Field(
|
|
285
|
+
default=None,
|
|
286
|
+
description="Code-related information for the tool."
|
|
287
|
+
)
|
|
288
|
+
]
|
|
289
|
+
endpoint: Annotated[
|
|
290
|
+
Optional[AIToolEndpointPayload],
|
|
291
|
+
Field(
|
|
292
|
+
default=None,
|
|
293
|
+
description="Endpoint-related information for the tool."
|
|
294
|
+
)
|
|
295
|
+
]
|
|
296
|
+
dependencies: Annotated[
|
|
297
|
+
Optional[AIToolDependencies],
|
|
298
|
+
Field(
|
|
299
|
+
default=None,
|
|
300
|
+
description="Dependencies required by this tool."
|
|
301
|
+
)
|
|
302
|
+
]
|
|
303
|
+
config: Annotated[
|
|
304
|
+
Optional[Dict],
|
|
305
|
+
Field(
|
|
306
|
+
default=None,
|
|
307
|
+
description="Configuration information for this tool."
|
|
308
|
+
)
|
|
309
|
+
]
|
|
310
|
+
schema_: Annotated[
|
|
311
|
+
AIToolSchema,
|
|
312
|
+
Field(
|
|
313
|
+
...,
|
|
314
|
+
description="Schema information for this tool.",
|
|
315
|
+
alias="schema"
|
|
316
|
+
)
|
|
317
|
+
]
|
|
318
|
+
environment_variables: Annotated[
|
|
319
|
+
Optional[list[str]],
|
|
320
|
+
Field(
|
|
321
|
+
default=None,
|
|
322
|
+
description="Environment variables required by this tool."
|
|
323
|
+
)
|
|
324
|
+
]
|
|
325
|
+
metrics: Annotated[
|
|
326
|
+
Optional[Dict],
|
|
327
|
+
Field(
|
|
328
|
+
default=None,
|
|
329
|
+
description="Metrics and their respective values."
|
|
330
|
+
)
|
|
331
|
+
]
|
|
332
|
+
pricing: Annotated[
|
|
333
|
+
Optional[Dict],
|
|
334
|
+
Field(
|
|
335
|
+
default=None,
|
|
336
|
+
description="Type of currency and its corresponding price."
|
|
337
|
+
)
|
|
338
|
+
]
|
|
339
|
+
benchmark_test: Annotated[
|
|
340
|
+
Optional[AIToolBenchmark],
|
|
341
|
+
Field(
|
|
342
|
+
default=None,
|
|
343
|
+
description="Benchmark test details."
|
|
344
|
+
)
|
|
345
|
+
]
|
|
346
|
+
|
|
347
|
+
@model_validator(mode='before')
|
|
348
|
+
@classmethod
|
|
349
|
+
def check_tool_type(cls, data):
|
|
350
|
+
if "tool_type" not in data:
|
|
351
|
+
data["tool_type"] = CustomToolType.CODE.value
|
|
352
|
+
if data["tool_type"] == CustomToolType.CODE.value and "code" in data and "endpoint" in data:
|
|
353
|
+
data["endpoint"] = None
|
|
354
|
+
if data["tool_type"] == CustomToolType.ENDPOINT.value and "code" in data and "endpoint" in data:
|
|
355
|
+
data["code"] = None
|
|
356
|
+
return data
|
|
357
|
+
|
|
358
|
+
@model_validator(mode="after")
|
|
359
|
+
def validate_post_payload(self):
|
|
360
|
+
if self.tool_type == CustomToolType.CODE and not self.code:
|
|
361
|
+
raise PydanticCustomError(
|
|
362
|
+
"missing code_payload", 'tool_type is "code", but code field missing in payload.'
|
|
363
|
+
)
|
|
364
|
+
|
|
365
|
+
if self.tool_type == CustomToolType.CODE and not self.code.source_code_url and not self.code.source_code_base64:
|
|
366
|
+
raise PydanticCustomError(
|
|
367
|
+
"missing_source_code ", 'Missing both source_code_url and source_code_base64.'
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
if self.code and self.code.source_code_base64:
|
|
371
|
+
self.code.source_code_base64 = get_base64_encoding(
|
|
372
|
+
tool_code=self.code.source_code_base64)
|
|
373
|
+
|
|
374
|
+
if self.tool_type == CustomToolType.ENDPOINT and not self.endpoint:
|
|
375
|
+
raise PydanticCustomError(
|
|
376
|
+
"missing_endpoint_payload", 'tool_type is "endpoint", but endpoint field missing in payload.'
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
if self.service_provider_type.value == ServiceProviderType.IBM.value:
|
|
380
|
+
raise Exception(f"The service provider type 'IBM' is not supported. Supported service provider type are: 'custom'")
|
|
381
|
+
|
|
382
|
+
if not self.display_name:
|
|
383
|
+
self.display_name = self.tool_name
|
|
384
|
+
|
|
385
|
+
return self
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
class PatchPayload(BaseModel):
|
|
389
|
+
op: Annotated[
|
|
390
|
+
PatchOperationTypes,
|
|
391
|
+
Field(
|
|
392
|
+
...,
|
|
393
|
+
description="Type of operation to be performed."
|
|
394
|
+
)
|
|
395
|
+
]
|
|
396
|
+
path: Annotated[
|
|
397
|
+
str,
|
|
398
|
+
Field(
|
|
399
|
+
...,
|
|
400
|
+
description="Path of the field on which the operation needs to be performed."
|
|
401
|
+
)
|
|
402
|
+
]
|
|
403
|
+
value: Annotated[
|
|
404
|
+
Any,
|
|
405
|
+
Field(
|
|
406
|
+
...,
|
|
407
|
+
description="The value to be applied during the specified operation on the given field path."
|
|
408
|
+
)
|
|
409
|
+
]
|
|
410
|
+
|
|
411
|
+
@model_validator(mode="after")
|
|
412
|
+
def validate_patch_payload(self):
|
|
413
|
+
if "source_code_base64" in self.path:
|
|
414
|
+
self.value = get_base64_encoding(tool_code=self.value)
|
|
415
|
+
return self
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
class ToolUpdatePayload(BaseModel):
|
|
419
|
+
payload: Annotated[
|
|
420
|
+
list[PatchPayload],
|
|
421
|
+
Field(
|
|
422
|
+
...,
|
|
423
|
+
description="List of patch payloads used to perform the patch operation."
|
|
424
|
+
)
|
|
425
|
+
]
|
|
426
|
+
|
|
427
|
+
@model_validator(mode='before')
|
|
428
|
+
@classmethod
|
|
429
|
+
def validate_ai_tool_patch_payload(cls, values):
|
|
430
|
+
if "payload" not in values or not isinstance(values.get("payload"), list):
|
|
431
|
+
raise PydanticCustomError(
|
|
432
|
+
"Invalid_payload",
|
|
433
|
+
"The payload is either missing or not in a valid list format."
|
|
434
|
+
)
|
|
435
|
+
return values
|