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,111 @@
|
|
|
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, Optional, Type
|
|
11
|
+
|
|
12
|
+
from langchain.callbacks.manager import CallbackManagerForToolRun
|
|
13
|
+
from langchain.tools import BaseTool
|
|
14
|
+
from pydantic import BaseModel, Field, PrivateAttr
|
|
15
|
+
|
|
16
|
+
from ibm_watsonx_gov.tools.schemas.vectordb_retrieval_schema import \
|
|
17
|
+
ChromaDbRetrieverConfig
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class RetrievalToolInput(BaseModel):
|
|
21
|
+
query: Annotated[str, Field(description="Search query")]
|
|
22
|
+
n_results: Annotated[Optional[int], Field(
|
|
23
|
+
description="Number of results to return", default=5)]
|
|
24
|
+
where: Annotated[Optional[dict], Field(
|
|
25
|
+
description="A dict used to filter results by the metadata. E.g. {'source': 'student_info'} ", default=None)]
|
|
26
|
+
where_document: Annotated[Optional[dict], Field(
|
|
27
|
+
description="A dict used to filter by the documents. E.g. {$contains: 'My Text'}.", default=None)]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ChromaDBRetrievalTool(BaseTool):
|
|
31
|
+
"""
|
|
32
|
+
Tool for searching the ChromaDB vector database.
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
Basic usage
|
|
36
|
+
.. code-block:: python
|
|
37
|
+
|
|
38
|
+
case-1 : With path
|
|
39
|
+
retriever_tool_config = {
|
|
40
|
+
"path": "./medium_db",
|
|
41
|
+
"collection_name": "medium_articles",
|
|
42
|
+
"embedding_function": embedding_functions.OpenAIEmbeddingFunction(),
|
|
43
|
+
"n_results": 2
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
chromadb_tool = ChromaDBRetrievalTool(**retriever_tool_config)
|
|
47
|
+
chromadb_tool.invoke({"query": "What is concept drift?"})
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
name: str = "chromadb_retrieval_tool"
|
|
51
|
+
description: str = "Search ChromaDB vector database and return the top-k results"
|
|
52
|
+
args_schema: Type[BaseModel] = RetrievalToolInput
|
|
53
|
+
|
|
54
|
+
_retriever: any = PrivateAttr()
|
|
55
|
+
_config = PrivateAttr()
|
|
56
|
+
|
|
57
|
+
def __init__(self, **kwargs):
|
|
58
|
+
"""
|
|
59
|
+
Arguments for creating a Chromadb retrieval tool which connects to a local or remote ChromaDB server.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
path: Path to the database
|
|
63
|
+
host: The hostname of the Chroma server. Defaults to "localhost". Required if path is not provided.
|
|
64
|
+
port: The port of the Chroma server. Defaults to "8000". Required if path is not provided
|
|
65
|
+
ssl: Whether to use SSL to connect to the Chroma server. Defaults to False.
|
|
66
|
+
headers: A dictionary of headers to send to the Chroma server. Defaults to {}.
|
|
67
|
+
settings: A dictionary of settings to communicate with the chroma server. Chromadb Settings object
|
|
68
|
+
tenant: The tenant to use for this client. Defaults to the default tenant.
|
|
69
|
+
database: The database to use for this client. Defaults to the default database.
|
|
70
|
+
collection_name: Name of the collection where documents are stored
|
|
71
|
+
embedding_function: Optional function to use to embed documents.
|
|
72
|
+
Uses the default embedding function if not provided.
|
|
73
|
+
n_results: Optional number of results to return
|
|
74
|
+
"""
|
|
75
|
+
super().__init__(**kwargs)
|
|
76
|
+
|
|
77
|
+
from ibm_watsonx_gov.tools.utils.package_utils import \
|
|
78
|
+
install_and_import_packages
|
|
79
|
+
|
|
80
|
+
install_and_import_packages(["chromadb"])
|
|
81
|
+
self._config = ChromaDbRetrieverConfig(**kwargs)
|
|
82
|
+
self._validate_and_create_retriever(self._config)
|
|
83
|
+
|
|
84
|
+
self._collection = self._retriever.get_collection(
|
|
85
|
+
name=self._config.collection_name, embedding_function=self._config.embedding_function)
|
|
86
|
+
|
|
87
|
+
def _run(self, query, run_manager: Optional[CallbackManagerForToolRun] = None, **kwargs):
|
|
88
|
+
"""Performs a Chromadb vector search and returns the top n_results content"""
|
|
89
|
+
|
|
90
|
+
where = None
|
|
91
|
+
where_document = None
|
|
92
|
+
|
|
93
|
+
results = self._collection.query(
|
|
94
|
+
query_texts=[query],
|
|
95
|
+
where=where,
|
|
96
|
+
where_document=where_document,
|
|
97
|
+
n_results=self._config.n_results
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
return results['documents']
|
|
101
|
+
|
|
102
|
+
def _validate_and_create_retriever(self, config: ChromaDbRetrieverConfig):
|
|
103
|
+
import chromadb
|
|
104
|
+
if config.path != None:
|
|
105
|
+
self._retriever = chromadb.PersistentClient(config.path)
|
|
106
|
+
else:
|
|
107
|
+
from chromadb.config import DEFAULT_DATABASE, DEFAULT_TENANT
|
|
108
|
+
tenant = config.tenant or DEFAULT_TENANT
|
|
109
|
+
database = config.database or DEFAULT_DATABASE
|
|
110
|
+
self._retriever = chromadb.HttpClient(host=config.host, port=config.port, ssl=config.ssl, headers=config.headers,
|
|
111
|
+
settings=config.settings, tenant=tenant, database=database)
|
|
@@ -0,0 +1,10 @@
|
|
|
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 .restapi_tool import RestApiTool, load_headers
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
|
|
11
|
+
import json
|
|
12
|
+
import os
|
|
13
|
+
from typing import Any, Dict, Type
|
|
14
|
+
|
|
15
|
+
import requests
|
|
16
|
+
from langchain.tools import BaseTool
|
|
17
|
+
from pydantic import BaseModel
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class RestApiTool(BaseTool):
|
|
21
|
+
"""
|
|
22
|
+
Class to construct a tool using the rest api , schema dynamically
|
|
23
|
+
"""
|
|
24
|
+
name: str
|
|
25
|
+
description: str
|
|
26
|
+
method: str = "POST"
|
|
27
|
+
endpoint: str = ""
|
|
28
|
+
headers: Dict[str, str] = {}
|
|
29
|
+
args_schema: Type[BaseModel]
|
|
30
|
+
|
|
31
|
+
def _run(self, **kwargs) -> Any:
|
|
32
|
+
if self.method.upper() == "GET":
|
|
33
|
+
response = requests.get(
|
|
34
|
+
self.endpoint, params=kwargs, headers=self.headers)
|
|
35
|
+
elif self.method.upper() == "POST":
|
|
36
|
+
parsed = self.args_schema(**kwargs)
|
|
37
|
+
payload = json.loads(parsed.model_dump_json())
|
|
38
|
+
response = requests.post(
|
|
39
|
+
self.endpoint, json=payload, headers=self.headers)
|
|
40
|
+
else:
|
|
41
|
+
raise ValueError(f"Unsupported method {self.method}")
|
|
42
|
+
return response.json()
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def load_headers(tool_name, headers: dict = {}) -> dict:
|
|
46
|
+
"""Method to load the header using evv information
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
tool_name (_type_): Name of the tool
|
|
50
|
+
headers (dict, optional): Headers associated. Defaults to {}.
|
|
51
|
+
|
|
52
|
+
Raises:
|
|
53
|
+
Exception: _description_
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
dict: _description_
|
|
57
|
+
"""
|
|
58
|
+
missing_keys = []
|
|
59
|
+
for key, value in headers.items():
|
|
60
|
+
if value == f"${key}":
|
|
61
|
+
value = os.getenv(key)
|
|
62
|
+
if value is None:
|
|
63
|
+
missing_keys.append(key)
|
|
64
|
+
else:
|
|
65
|
+
headers[key] = value
|
|
66
|
+
elif value == "$DYNAMIC_HEADER":
|
|
67
|
+
missing_keys.append(key)
|
|
68
|
+
|
|
69
|
+
if len(missing_keys) > 0:
|
|
70
|
+
raise Exception(
|
|
71
|
+
f"Missing header information while loading tool :{tool_name}. Details :{missing_keys}")
|
|
72
|
+
return headers
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
from .search_tool_schema import SearchToolConfig, SearchToolInput, GoogleSearchToolConfig
|
|
10
|
+
from .vectordb_retrieval_schema import ChromaDbRetrieverConfig
|
|
@@ -0,0 +1,46 @@
|
|
|
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, Optional
|
|
11
|
+
|
|
12
|
+
from pydantic import BaseModel, Field
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# Define the args schema using Pydantic
|
|
16
|
+
class SearchToolInput(BaseModel):
|
|
17
|
+
"""
|
|
18
|
+
Model that can be used for setting input args for search tools
|
|
19
|
+
"""
|
|
20
|
+
query: Annotated[str,
|
|
21
|
+
Field(..., description="Search the input from the given search tool")]
|
|
22
|
+
top_k_results: Annotated[Optional[int], Field(
|
|
23
|
+
3, description="Number of search results to retrieve")]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class SearchToolConfig(BaseModel):
|
|
27
|
+
"""
|
|
28
|
+
Model to be used for getting the initialization parameters for search tools
|
|
29
|
+
"""
|
|
30
|
+
top_k_results: Annotated[Optional[int], Field(
|
|
31
|
+
3, description="Number of search results to retrieve")]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class GoogleSearchToolConfig(BaseModel):
|
|
35
|
+
"""
|
|
36
|
+
Model to be used for getting the initialization parameters for Google search tool
|
|
37
|
+
"""
|
|
38
|
+
top_k_results: Annotated[Optional[int], Field(
|
|
39
|
+
3, description="Number of search results to retrieve")]
|
|
40
|
+
serpapi_key: Annotated[
|
|
41
|
+
str,
|
|
42
|
+
Field(
|
|
43
|
+
...,
|
|
44
|
+
description="API key used to authenticate requests to SerpAPI. You can generate your API key from https://serpapi.com/manage-api-key."
|
|
45
|
+
)
|
|
46
|
+
]
|
|
@@ -0,0 +1,55 @@
|
|
|
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, Callable, Optional
|
|
11
|
+
|
|
12
|
+
from pydantic import BaseModel, Field, model_validator
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ChromaDbRetrieverConfig(BaseModel):
|
|
16
|
+
"""
|
|
17
|
+
Configuration for retrieval tool
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
path: Annotated[str, Field(
|
|
21
|
+
description="Path to the database")]
|
|
22
|
+
host: Annotated[Optional[str], Field(
|
|
23
|
+
description="The hostname of the Chroma server. Defaults to 'localhost'. Required if path is not provided", default='localhost')]
|
|
24
|
+
port: Annotated[Optional[int], Field(
|
|
25
|
+
description="The port of the Chroma server. Defaults to 8000. Required if path is not provided", default=8000)]
|
|
26
|
+
ssl: Annotated[Optional[bool], Field(
|
|
27
|
+
description="Whether to use SSL to connect to the Chroma server. Defaults to False", default=False)]
|
|
28
|
+
headers: Annotated[Optional[dict], Field(
|
|
29
|
+
description="A dictionary of headers to send to the Chroma server. Defaults to {}", default={})]
|
|
30
|
+
settings: Annotated[Optional[dict], Field(
|
|
31
|
+
description="A dictionary of settings to communicate with the chroma server. Chromadb Settings object", default={})]
|
|
32
|
+
tenant: Annotated[Optional[str], Field(
|
|
33
|
+
description="The tenant to use for this Chroma server. Defaults to the default tenant.", default=None)]
|
|
34
|
+
database: Annotated[Optional[str], Field(
|
|
35
|
+
description="The database to use for this client. Defaults to the default database.", default=None)]
|
|
36
|
+
collection_name: Annotated[str, Field(
|
|
37
|
+
description="Name of the collection where documents are stored")]
|
|
38
|
+
embedding_function: Annotated[Callable, Field(
|
|
39
|
+
description="Function to use for embedded documents")]
|
|
40
|
+
n_results: Annotated[Optional[int], Field(
|
|
41
|
+
description="Optional number of results to return", default=3)]
|
|
42
|
+
|
|
43
|
+
@model_validator(mode="after")
|
|
44
|
+
def validate_config(self) -> "ChromaDbRetrieverConfig":
|
|
45
|
+
if self.path is None or (self.host is None and self.port is None):
|
|
46
|
+
raise Exception(
|
|
47
|
+
"Connection information for Chromadb is missing. Provide either the path to the database or provide host and port where it is running.")
|
|
48
|
+
|
|
49
|
+
if self.collection_name is None:
|
|
50
|
+
raise Exception("Provide name of the collection to work with.")
|
|
51
|
+
|
|
52
|
+
if self.embedding_function is None:
|
|
53
|
+
raise Exception("Missing embedding function")
|
|
54
|
+
|
|
55
|
+
return self
|
|
@@ -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 .display_utils import display_tools
|
|
11
|
+
from .package_utils import install_and_import_packages
|
|
12
|
+
from .python_utils import (get_base64_decoding, get_base64_encoding,
|
|
13
|
+
validate_envs)
|
|
14
|
+
from .tool_utils import TOOL_REGISTRY, get_pydantic_model, list_ootb_tools
|
|
@@ -0,0 +1,69 @@
|
|
|
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 enum import Enum
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CustomToolType(Enum):
|
|
14
|
+
CODE = "code"
|
|
15
|
+
ENDPOINT = "endpoint"
|
|
16
|
+
|
|
17
|
+
@classmethod
|
|
18
|
+
def values(cls):
|
|
19
|
+
return [member.value for member in cls]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ServiceProviderType(Enum):
|
|
23
|
+
IBM = "IBM"
|
|
24
|
+
CUSTOM = "custom"
|
|
25
|
+
|
|
26
|
+
@classmethod
|
|
27
|
+
def values(cls):
|
|
28
|
+
return [member.value for member in cls]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class Categories(Enum):
|
|
32
|
+
SEARCH = "Search"
|
|
33
|
+
GUARDRAILS = "Guardrails"
|
|
34
|
+
QUERY = "Query"
|
|
35
|
+
RAG = "RAG"
|
|
36
|
+
EVALUATION = "Evaluation"
|
|
37
|
+
OTHER = "Other"
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def values(cls):
|
|
41
|
+
return [member.value for member in cls]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class PatchOperationTypes(Enum):
|
|
45
|
+
ADD = "add"
|
|
46
|
+
REMOVE = "remove"
|
|
47
|
+
REPLACE = "replace"
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def values(cls):
|
|
51
|
+
return [member.value for member in cls]
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ComponentTypes(Enum):
|
|
55
|
+
AI_TOOL = "ai_tool"
|
|
56
|
+
AI_AGENT = "ai_agent"
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def values(cls):
|
|
60
|
+
return [member.value for member in cls]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class Framework(Enum):
|
|
64
|
+
LANGCHAIN = "langchain"
|
|
65
|
+
LANGGRAPH = "langgraph"
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def values(cls):
|
|
69
|
+
return [member.value for member in cls]
|
|
@@ -0,0 +1,38 @@
|
|
|
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 pandas as pd
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
import itables
|
|
14
|
+
from itables import init_notebook_mode
|
|
15
|
+
init_notebook_mode(all_interactive=True)
|
|
16
|
+
except Exception as e:
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def display_tools(column_list: list = [], limit: int = None):
|
|
21
|
+
from ..clients.ai_tool_client import list_tools
|
|
22
|
+
if len(column_list) == 0:
|
|
23
|
+
column_list = ["asset_name", "service_provider_type",
|
|
24
|
+
"category"]
|
|
25
|
+
|
|
26
|
+
details = list_tools(limit=limit)
|
|
27
|
+
tools = details['tools'] or []
|
|
28
|
+
if len(tools) > 0:
|
|
29
|
+
df = pd.DataFrame(tools)['entity'].values
|
|
30
|
+
df1 = pd.DataFrame(list(df))[column_list]
|
|
31
|
+
df1 = df1.dropna()
|
|
32
|
+
|
|
33
|
+
# Rename the column for ease of use
|
|
34
|
+
df1 = df1.rename(columns={'asset_name': 'tool_name'})
|
|
35
|
+
else:
|
|
36
|
+
df1 = pd.DataFrame()
|
|
37
|
+
|
|
38
|
+
itables.show(df1)
|
|
@@ -0,0 +1,108 @@
|
|
|
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
|
+
import warnings
|
|
12
|
+
|
|
13
|
+
from ...entities.enums import Region
|
|
14
|
+
from ...utils.python_utils import get_environment_variable_value
|
|
15
|
+
from .platform_url_mapping import ALLOWED_PLATFORM_URL, PROD_PLATFORM_URL
|
|
16
|
+
from ...utils.url_mapping import WATSONX_REGION_URLS
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def get_property_value(property_name, default=None):
|
|
20
|
+
if os.environ.get(property_name):
|
|
21
|
+
return os.environ.get(property_name)
|
|
22
|
+
else:
|
|
23
|
+
return default
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def get_base_url():
|
|
27
|
+
is_cpd = get_is_cpd()
|
|
28
|
+
|
|
29
|
+
if is_cpd:
|
|
30
|
+
watsonx_url = get_environment_variable_value(
|
|
31
|
+
possible_env_variables=["WATSONX_URL", "PLATFORM_URL", "WXG_URL"])
|
|
32
|
+
if not watsonx_url:
|
|
33
|
+
raise Exception(
|
|
34
|
+
"The WATSONX_URL cannot be empty for CPD environment")
|
|
35
|
+
else:
|
|
36
|
+
watsonx_region = get_property_value(property_name="WATSONX_REGION")
|
|
37
|
+
platform_url = get_property_value(property_name="PLATFORM_URL")
|
|
38
|
+
|
|
39
|
+
if watsonx_region:
|
|
40
|
+
watsonx_region_map = WATSONX_REGION_URLS.get(watsonx_region)
|
|
41
|
+
if not watsonx_region_map:
|
|
42
|
+
raise Exception(
|
|
43
|
+
f"\nThe WATSONX_REGION '{watsonx_region}' is invalid or not supported.\n"
|
|
44
|
+
f"Supported WATSONX_REGION are: {', '.join(Region.values())}."
|
|
45
|
+
)
|
|
46
|
+
watsonx_url = watsonx_region_map.dai_url
|
|
47
|
+
elif platform_url:
|
|
48
|
+
if platform_url not in ALLOWED_PLATFORM_URL:
|
|
49
|
+
raise Exception(
|
|
50
|
+
f"\nThe platform URL '{platform_url}' is invalid or not supported.\n"
|
|
51
|
+
f"Supported platform URLs are:\n{', '.join(PROD_PLATFORM_URL.keys())}."
|
|
52
|
+
)
|
|
53
|
+
watsonx_url = platform_url
|
|
54
|
+
else:
|
|
55
|
+
warnings.warn(
|
|
56
|
+
"Since WATSONX_REGION is not provided in the environment variable, the Dallas region will be used as the default.",
|
|
57
|
+
UserWarning)
|
|
58
|
+
# Setting Dallas region as default if not provided.
|
|
59
|
+
os.environ["PLATFORM_URL"] = "https://api.dataplatform.cloud.ibm.com"
|
|
60
|
+
watsonx_url = get_property_value(property_name="PLATFORM_URL")
|
|
61
|
+
|
|
62
|
+
return watsonx_url
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def get_authenticator_url():
|
|
66
|
+
base_url = get_base_url()
|
|
67
|
+
if get_is_cpd():
|
|
68
|
+
return base_url
|
|
69
|
+
else:
|
|
70
|
+
return ALLOWED_PLATFORM_URL.get(base_url)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def get_api_key():
|
|
74
|
+
return get_property_value(property_name="WATSONX_APIKEY")
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def get_cpd_password():
|
|
78
|
+
return get_property_value(property_name="WATSONX_PASSWORD")
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def get_cpd_username():
|
|
82
|
+
return get_property_value(property_name="WATSONX_USERNAME")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def get_is_cpd():
|
|
86
|
+
watsonx_version = get_property_value(property_name="WATSONX_VERSION")
|
|
87
|
+
if watsonx_version:
|
|
88
|
+
return True
|
|
89
|
+
else:
|
|
90
|
+
return False
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def get_ssl_verification():
|
|
94
|
+
verify = get_property_value(
|
|
95
|
+
property_name="WATSONX_DISABLE_SSL", default=False)
|
|
96
|
+
return str(verify).lower() in ("false", "0", "no")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def get_service_instance_id():
|
|
100
|
+
return get_property_value(property_name="WXG_SERVICE_INSTANCE_ID")
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def get_wxai_url():
|
|
104
|
+
return get_property_value(property_name="WXAI_URL")
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def get_watsonx_region():
|
|
108
|
+
return get_property_value(property_name="WATSONX_REGION")
|
|
@@ -0,0 +1,40 @@
|
|
|
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 subprocess
|
|
11
|
+
import sys
|
|
12
|
+
from typing import List
|
|
13
|
+
|
|
14
|
+
import pkg_resources
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def is_package_installed(package_name):
|
|
18
|
+
try:
|
|
19
|
+
pkg_resources.get_distribution(package_name)
|
|
20
|
+
return True
|
|
21
|
+
except pkg_resources.DistributionNotFound:
|
|
22
|
+
return False
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def install_and_import_packages(packages: List[str]):
|
|
26
|
+
try:
|
|
27
|
+
# Find missing packages
|
|
28
|
+
missing_packages = []
|
|
29
|
+
for p in packages:
|
|
30
|
+
if not is_package_installed(p):
|
|
31
|
+
missing_packages.append(p)
|
|
32
|
+
|
|
33
|
+
# Install missing packages if any
|
|
34
|
+
if missing_packages:
|
|
35
|
+
print(
|
|
36
|
+
f"Installing missing packages: {', '.join(missing_packages)}")
|
|
37
|
+
subprocess.check_call([sys.executable, "-m", "pip",
|
|
38
|
+
"install"] + missing_packages)
|
|
39
|
+
except Exception as ex:
|
|
40
|
+
raise ImportError(f"Error while installing {packages}.Details:{ex}")
|
|
Binary file
|
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
# Convert string to bytes and encode
|
|
11
|
+
import base64
|
|
12
|
+
import os
|
|
13
|
+
import json
|
|
14
|
+
|
|
15
|
+
from ibm_watsonx_gov.utils.python_utils import get
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# Source code encoder
|
|
19
|
+
def get_base64_encoding(tool_code: str):
|
|
20
|
+
return base64.b64encode(tool_code.encode()).decode()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# Decode the base64 string
|
|
24
|
+
def get_base64_decoding(encoded_code: str):
|
|
25
|
+
return base64.b64decode(encoded_code).decode()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# Validate envs:
|
|
29
|
+
def validate_envs(tool_name: str, env_list: list = []):
|
|
30
|
+
if len(env_list) == 0:
|
|
31
|
+
return env_list
|
|
32
|
+
|
|
33
|
+
import os
|
|
34
|
+
missing_envs = []
|
|
35
|
+
for env in env_list:
|
|
36
|
+
value = os.getenv(env)
|
|
37
|
+
if value is None:
|
|
38
|
+
missing_envs.append(env)
|
|
39
|
+
|
|
40
|
+
if len(missing_envs) > 0:
|
|
41
|
+
raise Exception(
|
|
42
|
+
f"Please set environment values :{missing_envs} for using the tool:{tool_name}")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# Extracting bss_account id from user_token
|
|
46
|
+
def get_bss_account_id(token: str):
|
|
47
|
+
payload_b64 = token.split('.')[1]
|
|
48
|
+
padding = '=' * (-len(payload_b64) % 4)
|
|
49
|
+
payload_b64 = base64.urlsafe_b64decode(payload_b64 + padding)
|
|
50
|
+
payload = json.loads(payload_b64)
|
|
51
|
+
return get(payload, "bss", default="")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# Processing endpoint response
|
|
55
|
+
def process_result(result):
|
|
56
|
+
try:
|
|
57
|
+
if result.text:
|
|
58
|
+
try:
|
|
59
|
+
result = json.loads(result.text)
|
|
60
|
+
except json.JSONDecodeError:
|
|
61
|
+
raise Exception(result.text)
|
|
62
|
+
|
|
63
|
+
if result.get("errors"):
|
|
64
|
+
raise Exception(result.get("errors"))
|
|
65
|
+
return result
|
|
66
|
+
raise Exception(f"Empty response received. Status code: {result.status_code}")
|
|
67
|
+
except Exception as e:
|
|
68
|
+
raise Exception(str(e))
|