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