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.
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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
  56. ibm_watsonx_gov/evaluators/impl/evaluate_model_risk_impl.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
  195. ibm_watsonx_gov/providers/detectors_provider.py +415 -0
  196. ibm_watsonx_gov/providers/eval_assist_provider.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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 +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}")
@@ -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))