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