pygeai 0.1.51b3__py3-none-any.whl → 0.6.0b15__py3-none-any.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.

Potentially problematic release.


This version of pygeai might be problematic. Click here for more details.

Files changed (648) hide show
  1. pygeai/__init__.py +9 -1
  2. pygeai/_docs/Makefile +20 -0
  3. pygeai/_docs/make.bat +35 -0
  4. pygeai/_docs/source/conf.py +117 -0
  5. pygeai/_docs/source/content/ai_lab/cli.rst +747 -0
  6. pygeai/_docs/source/content/ai_lab/models.rst +1734 -0
  7. pygeai/_docs/source/content/ai_lab/runner.rst +253 -0
  8. pygeai/_docs/source/content/ai_lab/spec.rst +431 -0
  9. pygeai/_docs/source/content/ai_lab/usage.rst +1011 -0
  10. pygeai/_docs/source/content/ai_lab.rst +102 -0
  11. pygeai/_docs/source/content/analytics.rst +598 -0
  12. pygeai/_docs/source/content/api_reference/admin.rst +161 -0
  13. pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
  14. pygeai/_docs/source/content/api_reference/auth.rst +379 -0
  15. pygeai/_docs/source/content/api_reference/chat.rst +754 -0
  16. pygeai/_docs/source/content/api_reference/embeddings.rst +154 -0
  17. pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
  18. pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
  19. pygeai/_docs/source/content/api_reference/files.rst +592 -0
  20. pygeai/_docs/source/content/api_reference/gam.rst +401 -0
  21. pygeai/_docs/source/content/api_reference/health.rst +58 -0
  22. pygeai/_docs/source/content/api_reference/project.rst +738 -0
  23. pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
  24. pygeai/_docs/source/content/api_reference/rag.rst +710 -0
  25. pygeai/_docs/source/content/api_reference/rerank.rst +94 -0
  26. pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
  27. pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
  28. pygeai/_docs/source/content/api_reference.rst +58 -0
  29. pygeai/_docs/source/content/authentication.rst +295 -0
  30. pygeai/_docs/source/content/chat_gui.rst +121 -0
  31. pygeai/_docs/source/content/cli.rst +203 -0
  32. pygeai/_docs/source/content/debugger.rst +651 -0
  33. pygeai/_docs/source/content/intro.rst +67 -0
  34. pygeai/_docs/source/content/migration.rst +929 -0
  35. pygeai/_docs/source/content/modules.rst +7 -0
  36. pygeai/_docs/source/content/quickstart.rst +143 -0
  37. pygeai/_docs/source/content/samples.rst +394 -0
  38. pygeai/_docs/source/index.rst +75 -0
  39. pygeai/_docs/source/modules.rst +7 -0
  40. pygeai/_docs/source/pygeai.admin.rst +29 -0
  41. pygeai/_docs/source/pygeai.analytics.rst +53 -0
  42. pygeai/_docs/source/pygeai.assistant.data.rst +21 -0
  43. pygeai/_docs/source/pygeai.assistant.data_analyst.rst +29 -0
  44. pygeai/_docs/source/pygeai.assistant.rag.rst +53 -0
  45. pygeai/_docs/source/pygeai.assistant.rst +55 -0
  46. pygeai/_docs/source/pygeai.auth.rst +29 -0
  47. pygeai/_docs/source/pygeai.chat.rst +69 -0
  48. pygeai/_docs/source/pygeai.cli.commands.flows.rst +10 -0
  49. pygeai/_docs/source/pygeai.cli.commands.lab.rst +53 -0
  50. pygeai/_docs/source/pygeai.cli.commands.rst +222 -0
  51. pygeai/_docs/source/pygeai.cli.rst +62 -0
  52. pygeai/_docs/source/pygeai.cli.texts.rst +21 -0
  53. pygeai/_docs/source/pygeai.core.base.rst +53 -0
  54. pygeai/_docs/source/pygeai.core.common.rst +37 -0
  55. pygeai/_docs/source/pygeai.core.embeddings.rst +61 -0
  56. pygeai/_docs/source/pygeai.core.feedback.rst +37 -0
  57. pygeai/_docs/source/pygeai.core.files.rst +61 -0
  58. pygeai/_docs/source/pygeai.core.llm.rst +29 -0
  59. pygeai/_docs/source/pygeai.core.plugins.rst +37 -0
  60. pygeai/_docs/source/pygeai.core.rerank.rst +53 -0
  61. pygeai/_docs/source/pygeai.core.rst +63 -0
  62. pygeai/_docs/source/pygeai.core.secrets.rst +29 -0
  63. pygeai/_docs/source/pygeai.core.services.llm.rst +29 -0
  64. pygeai/_docs/source/pygeai.core.services.rst +37 -0
  65. pygeai/_docs/source/pygeai.core.utils.rst +37 -0
  66. pygeai/_docs/source/pygeai.dbg.rst +21 -0
  67. pygeai/_docs/source/pygeai.evaluation.dataset.rst +29 -0
  68. pygeai/_docs/source/pygeai.evaluation.plan.rst +29 -0
  69. pygeai/_docs/source/pygeai.evaluation.result.rst +29 -0
  70. pygeai/_docs/source/pygeai.evaluation.rst +31 -0
  71. pygeai/_docs/source/pygeai.flows.rst +29 -0
  72. pygeai/_docs/source/pygeai.gam.rst +29 -0
  73. pygeai/_docs/source/pygeai.health.rst +29 -0
  74. pygeai/_docs/source/pygeai.lab.agents.rst +37 -0
  75. pygeai/_docs/source/pygeai.lab.processes.rst +37 -0
  76. pygeai/_docs/source/pygeai.lab.rst +65 -0
  77. pygeai/_docs/source/pygeai.lab.spec.rst +29 -0
  78. pygeai/_docs/source/pygeai.lab.strategies.rst +37 -0
  79. pygeai/_docs/source/pygeai.lab.tools.rst +37 -0
  80. pygeai/_docs/source/pygeai.man.man1.rst +10 -0
  81. pygeai/_docs/source/pygeai.man.rst +18 -0
  82. pygeai/_docs/source/pygeai.migration.rst +29 -0
  83. pygeai/_docs/source/pygeai.organization.limits.rst +45 -0
  84. pygeai/_docs/source/pygeai.organization.rst +61 -0
  85. pygeai/_docs/source/pygeai.proxy.rst +53 -0
  86. pygeai/_docs/source/pygeai.rst +35 -0
  87. pygeai/_docs/source/pygeai.tests.admin.rst +21 -0
  88. pygeai/_docs/source/pygeai.tests.analytics.rst +45 -0
  89. pygeai/_docs/source/pygeai.tests.assistants.rag.rst +37 -0
  90. pygeai/_docs/source/pygeai.tests.assistants.rst +45 -0
  91. pygeai/_docs/source/pygeai.tests.auth.rst +29 -0
  92. pygeai/_docs/source/pygeai.tests.chat.rst +45 -0
  93. pygeai/_docs/source/pygeai.tests.cli.commands.lab.rst +37 -0
  94. pygeai/_docs/source/pygeai.tests.cli.commands.rst +165 -0
  95. pygeai/_docs/source/pygeai.tests.cli.docker.rst +10 -0
  96. pygeai/_docs/source/pygeai.tests.cli.rst +46 -0
  97. pygeai/_docs/source/pygeai.tests.core.base.data.rst +29 -0
  98. pygeai/_docs/source/pygeai.tests.core.base.rst +45 -0
  99. pygeai/_docs/source/pygeai.tests.core.common.data.rst +10 -0
  100. pygeai/_docs/source/pygeai.tests.core.common.rst +37 -0
  101. pygeai/_docs/source/pygeai.tests.core.embeddings.rst +37 -0
  102. pygeai/_docs/source/pygeai.tests.core.feedback.rst +21 -0
  103. pygeai/_docs/source/pygeai.tests.core.files.rst +53 -0
  104. pygeai/_docs/source/pygeai.tests.core.llm.rst +21 -0
  105. pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
  106. pygeai/_docs/source/pygeai.tests.core.rerank.rst +37 -0
  107. pygeai/_docs/source/pygeai.tests.core.rst +39 -0
  108. pygeai/_docs/source/pygeai.tests.core.secrets.rst +21 -0
  109. pygeai/_docs/source/pygeai.tests.core.services.rst +21 -0
  110. pygeai/_docs/source/pygeai.tests.core.utils.rst +21 -0
  111. pygeai/_docs/source/pygeai.tests.dbg.rst +21 -0
  112. pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
  113. pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
  114. pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
  115. pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
  116. pygeai/_docs/source/pygeai.tests.gam.rst +21 -0
  117. pygeai/_docs/source/pygeai.tests.health.rst +21 -0
  118. pygeai/_docs/source/pygeai.tests.integration.assistants.rag.rst +21 -0
  119. pygeai/_docs/source/pygeai.tests.integration.assistants.rst +18 -0
  120. pygeai/_docs/source/pygeai.tests.integration.chat.rst +21 -0
  121. pygeai/_docs/source/pygeai.tests.integration.lab.agents.rst +69 -0
  122. pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +77 -0
  123. pygeai/_docs/source/pygeai.tests.integration.lab.reasoning_strategies.rst +37 -0
  124. pygeai/_docs/source/pygeai.tests.integration.lab.rst +21 -0
  125. pygeai/_docs/source/pygeai.tests.integration.lab.tools.rst +77 -0
  126. pygeai/_docs/source/pygeai.tests.integration.rst +20 -0
  127. pygeai/_docs/source/pygeai.tests.lab.agents.rst +29 -0
  128. pygeai/_docs/source/pygeai.tests.lab.processes.rst +29 -0
  129. pygeai/_docs/source/pygeai.tests.lab.rst +49 -0
  130. pygeai/_docs/source/pygeai.tests.lab.spec.rst +29 -0
  131. pygeai/_docs/source/pygeai.tests.lab.strategies.rst +29 -0
  132. pygeai/_docs/source/pygeai.tests.lab.tools.rst +29 -0
  133. pygeai/_docs/source/pygeai.tests.migration.rst +29 -0
  134. pygeai/_docs/source/pygeai.tests.organization.limits.rst +29 -0
  135. pygeai/_docs/source/pygeai.tests.organization.rst +53 -0
  136. pygeai/_docs/source/pygeai.tests.proxy.rst +61 -0
  137. pygeai/_docs/source/pygeai.tests.rst +33 -0
  138. pygeai/admin/clients.py +14 -11
  139. pygeai/admin/endpoints.py +2 -2
  140. pygeai/analytics/clients.py +505 -0
  141. pygeai/analytics/endpoints.py +35 -0
  142. pygeai/analytics/managers.py +606 -0
  143. pygeai/analytics/mappers.py +207 -0
  144. pygeai/analytics/responses.py +240 -0
  145. pygeai/assistant/clients.py +18 -45
  146. pygeai/assistant/data/clients.py +1 -0
  147. pygeai/assistant/data_analyst/clients.py +8 -12
  148. pygeai/assistant/managers.py +195 -157
  149. pygeai/assistant/mappers.py +4 -2
  150. pygeai/assistant/rag/clients.py +27 -67
  151. pygeai/assistant/rag/mappers.py +12 -6
  152. pygeai/assistant/rag/models.py +301 -159
  153. pygeai/auth/__init__.py +0 -0
  154. pygeai/auth/clients.py +129 -0
  155. pygeai/auth/endpoints.py +6 -0
  156. pygeai/chat/clients.py +308 -37
  157. pygeai/chat/endpoints.py +3 -0
  158. pygeai/chat/iris.py +2 -8
  159. pygeai/chat/managers.py +9 -6
  160. pygeai/chat/session.py +38 -0
  161. pygeai/chat/settings.py +6 -0
  162. pygeai/chat/ui.py +678 -0
  163. pygeai/cli/__init__.py +0 -1
  164. pygeai/cli/commands/admin.py +7 -10
  165. pygeai/cli/commands/analytics.py +533 -0
  166. pygeai/cli/commands/assistant.py +9 -9
  167. pygeai/cli/commands/auth.py +299 -0
  168. pygeai/cli/commands/base.py +71 -9
  169. pygeai/cli/commands/chat.py +676 -19
  170. pygeai/cli/commands/common.py +28 -24
  171. pygeai/cli/commands/configuration.py +66 -13
  172. pygeai/cli/commands/docs.py +105 -0
  173. pygeai/cli/commands/embeddings.py +58 -11
  174. pygeai/cli/commands/evaluation.py +38 -38
  175. pygeai/cli/commands/feedback.py +3 -4
  176. pygeai/cli/commands/files.py +7 -8
  177. pygeai/cli/commands/gam.py +85 -10
  178. pygeai/cli/commands/lab/ai_lab.py +340 -484
  179. pygeai/cli/commands/lab/options.py +8 -0
  180. pygeai/cli/commands/lab/spec.py +273 -0
  181. pygeai/cli/commands/lab/utils.py +13 -0
  182. pygeai/cli/commands/llm.py +6 -7
  183. pygeai/cli/commands/migrate.py +1064 -436
  184. pygeai/cli/commands/organization.py +516 -11
  185. pygeai/cli/commands/rag.py +13 -14
  186. pygeai/cli/commands/rerank.py +3 -5
  187. pygeai/cli/commands/secrets.py +8 -9
  188. pygeai/cli/commands/usage_limits.py +18 -20
  189. pygeai/cli/commands/validators.py +144 -1
  190. pygeai/cli/commands/version.py +4 -5
  191. pygeai/cli/error_handler.py +151 -0
  192. pygeai/cli/geai.py +170 -31
  193. pygeai/cli/geai_proxy.py +86 -25
  194. pygeai/cli/install_man.py +93 -22
  195. pygeai/cli/parsers.py +75 -25
  196. pygeai/cli/texts/help.py +265 -28
  197. pygeai/core/base/clients.py +53 -12
  198. pygeai/core/base/mappers.py +11 -2
  199. pygeai/core/base/session.py +95 -11
  200. pygeai/core/common/config.py +78 -14
  201. pygeai/core/common/exceptions.py +96 -6
  202. pygeai/core/embeddings/__init__.py +19 -0
  203. pygeai/core/embeddings/clients.py +23 -5
  204. pygeai/core/embeddings/managers.py +9 -4
  205. pygeai/core/embeddings/mappers.py +16 -2
  206. pygeai/core/embeddings/responses.py +9 -2
  207. pygeai/core/feedback/clients.py +8 -3
  208. pygeai/core/files/clients.py +23 -24
  209. pygeai/core/files/managers.py +121 -30
  210. pygeai/core/files/responses.py +4 -3
  211. pygeai/core/handlers.py +10 -1
  212. pygeai/core/llm/clients.py +22 -29
  213. pygeai/core/models.py +127 -11
  214. pygeai/core/plugins/clients.py +6 -6
  215. pygeai/core/rerank/clients.py +9 -3
  216. pygeai/core/rerank/managers.py +22 -5
  217. pygeai/core/secrets/clients.py +16 -37
  218. pygeai/core/services/response.py +18 -0
  219. pygeai/core/services/rest.py +159 -49
  220. pygeai/core/utils/__init__.py +0 -0
  221. pygeai/core/utils/console.py +83 -0
  222. pygeai/core/utils/parsers.py +32 -0
  223. pygeai/core/utils/validators.py +10 -0
  224. pygeai/dbg/__init__.py +3 -0
  225. pygeai/dbg/debugger.py +854 -14
  226. pygeai/evaluation/clients.py +7 -4
  227. pygeai/evaluation/dataset/clients.py +46 -44
  228. pygeai/evaluation/plan/clients.py +28 -26
  229. pygeai/evaluation/result/clients.py +38 -5
  230. pygeai/gam/clients.py +50 -28
  231. pygeai/gam/endpoints.py +2 -1
  232. pygeai/health/__init__.py +0 -0
  233. pygeai/health/clients.py +24 -0
  234. pygeai/health/endpoints.py +1 -0
  235. pygeai/lab/__init__.py +0 -90
  236. pygeai/lab/agents/clients.py +203 -162
  237. pygeai/lab/agents/endpoints.py +4 -0
  238. pygeai/lab/agents/mappers.py +57 -7
  239. pygeai/lab/clients.py +24 -0
  240. pygeai/lab/constants.py +3 -0
  241. pygeai/lab/managers.py +571 -541
  242. pygeai/lab/models.py +108 -19
  243. pygeai/lab/processes/clients.py +332 -340
  244. pygeai/lab/processes/mappers.py +3 -3
  245. pygeai/lab/runners.py +90 -0
  246. pygeai/lab/spec/__init__.py +0 -0
  247. pygeai/lab/spec/loader.py +24 -0
  248. pygeai/lab/spec/parsers.py +39 -0
  249. pygeai/lab/strategies/clients.py +67 -63
  250. pygeai/lab/strategies/mappers.py +1 -1
  251. pygeai/lab/tools/clients.py +85 -118
  252. pygeai/lab/tools/endpoints.py +4 -0
  253. pygeai/lab/tools/mappers.py +5 -5
  254. pygeai/man/man1/geai-proxy.1 +116 -0
  255. pygeai/man/man1/geai.1 +2580 -66
  256. pygeai/migration/__init__.py +33 -0
  257. pygeai/migration/strategies.py +468 -146
  258. pygeai/migration/tools.py +170 -3
  259. pygeai/organization/clients.py +245 -50
  260. pygeai/organization/endpoints.py +17 -8
  261. pygeai/organization/limits/clients.py +34 -32
  262. pygeai/organization/limits/managers.py +108 -49
  263. pygeai/organization/managers.py +347 -53
  264. pygeai/organization/mappers.py +102 -2
  265. pygeai/organization/responses.py +58 -1
  266. pygeai/proxy/clients.py +6 -3
  267. pygeai/proxy/config.py +14 -1
  268. pygeai/proxy/managers.py +61 -33
  269. pygeai/proxy/servers.py +196 -51
  270. pygeai/proxy/tool.py +33 -16
  271. pygeai/tests/admin/__init__.py +0 -0
  272. pygeai/tests/admin/test_clients.py +148 -0
  273. pygeai/tests/analytics/__init__.py +0 -0
  274. pygeai/tests/analytics/test_clients.py +86 -0
  275. pygeai/tests/analytics/test_managers.py +94 -0
  276. pygeai/tests/analytics/test_mappers.py +84 -0
  277. pygeai/tests/analytics/test_responses.py +73 -0
  278. pygeai/tests/assistants/rag/test_clients.py +346 -0
  279. pygeai/tests/assistants/rag/test_models.py +292 -0
  280. pygeai/tests/assistants/test_clients.py +176 -82
  281. pygeai/tests/assistants/test_managers.py +191 -57
  282. pygeai/tests/auth/__init__.py +0 -0
  283. pygeai/tests/auth/test_clients.py +289 -0
  284. pygeai/tests/auth/test_oauth.py +172 -0
  285. pygeai/tests/auth/test_session_logging.py +150 -0
  286. pygeai/tests/chat/__init__.py +0 -0
  287. pygeai/tests/chat/test_clients.py +393 -0
  288. pygeai/tests/chat/test_iris.py +38 -0
  289. pygeai/tests/chat/test_session.py +62 -0
  290. pygeai/tests/chat/test_ui.py +224 -0
  291. pygeai/tests/cli/commands/__init__.py +0 -0
  292. pygeai/tests/cli/commands/lab/__init__.py +0 -0
  293. pygeai/tests/cli/commands/lab/test_ai_lab.py +786 -0
  294. pygeai/tests/cli/commands/lab/test_common.py +208 -0
  295. pygeai/tests/cli/commands/lab/test_spec.py +246 -0
  296. pygeai/tests/cli/commands/test_assistant.py +202 -0
  297. pygeai/tests/cli/commands/test_chat.py +130 -0
  298. pygeai/tests/cli/commands/test_common.py +350 -0
  299. pygeai/tests/cli/commands/test_embeddings.py +132 -0
  300. pygeai/tests/cli/commands/test_evaluation.py +656 -0
  301. pygeai/tests/cli/commands/test_feedback.py +65 -0
  302. pygeai/tests/cli/commands/test_files.py +161 -0
  303. pygeai/tests/cli/commands/test_gam.py +201 -0
  304. pygeai/tests/cli/commands/test_llm.py +114 -0
  305. pygeai/tests/cli/commands/test_migrate.py +176 -0
  306. pygeai/tests/cli/commands/test_organization.py +276 -0
  307. pygeai/tests/cli/commands/test_rag.py +266 -0
  308. pygeai/tests/cli/commands/test_rerank.py +110 -0
  309. pygeai/tests/cli/commands/test_secrets.py +171 -0
  310. pygeai/tests/cli/commands/test_show_help.py +41 -0
  311. pygeai/tests/cli/commands/test_usage_limits.py +412 -0
  312. pygeai/tests/cli/commands/test_validators.py +160 -0
  313. pygeai/tests/cli/commands/test_version.py +81 -0
  314. pygeai/tests/cli/docker/__init__.py +0 -0
  315. pygeai/tests/cli/test_credentials_flag.py +316 -0
  316. pygeai/tests/cli/test_error_handler.py +225 -0
  317. pygeai/tests/cli/test_geai_driver.py +154 -0
  318. pygeai/tests/cli/test_parsers.py +5 -5
  319. pygeai/tests/core/base/data/models.py +7 -0
  320. pygeai/tests/core/base/test_mappers.py +43 -11
  321. pygeai/tests/core/base/test_models.py +3 -1
  322. pygeai/tests/core/base/test_responses.py +53 -0
  323. pygeai/tests/core/common/__init__.py +0 -0
  324. pygeai/tests/core/common/data/__init__.py +0 -0
  325. pygeai/tests/core/common/test_config.py +186 -0
  326. pygeai/tests/core/common/test_decorators.py +69 -0
  327. pygeai/tests/core/embeddings/__init__.py +0 -0
  328. pygeai/tests/core/embeddings/test_clients.py +225 -0
  329. pygeai/tests/core/embeddings/test_managers.py +171 -0
  330. pygeai/tests/core/embeddings/test_mappers.py +142 -0
  331. pygeai/tests/core/feedback/__init__.py +0 -0
  332. pygeai/tests/core/feedback/test_clients.py +64 -0
  333. pygeai/tests/core/files/test_clients.py +128 -0
  334. pygeai/tests/core/files/test_managers.py +124 -78
  335. pygeai/tests/core/files/test_mappers.py +137 -0
  336. pygeai/tests/core/files/test_models.py +103 -0
  337. pygeai/tests/core/files/test_responses.py +122 -0
  338. pygeai/tests/core/llm/__init__.py +0 -0
  339. pygeai/tests/core/llm/test_clients.py +142 -0
  340. pygeai/tests/core/plugins/__init__.py +0 -0
  341. pygeai/tests/core/plugins/test_clients.py +66 -0
  342. pygeai/tests/core/rerank/test_clients.py +76 -0
  343. pygeai/tests/core/rerank/test_managers.py +61 -39
  344. pygeai/tests/core/secrets/__init__.py +0 -0
  345. pygeai/tests/core/secrets/test_clients.py +264 -0
  346. pygeai/tests/core/services/__init__.py +0 -0
  347. pygeai/tests/core/services/test_rest.py +273 -0
  348. pygeai/tests/core/test_handlers.py +66 -0
  349. pygeai/tests/core/utils/__init__.py +0 -0
  350. pygeai/tests/core/utils/test_console.py +80 -0
  351. pygeai/tests/dbg/__init__.py +0 -0
  352. pygeai/tests/dbg/test_debugger.py +591 -0
  353. pygeai/tests/evaluation/__init__.py +0 -0
  354. pygeai/tests/evaluation/dataset/__init__.py +0 -0
  355. pygeai/tests/evaluation/dataset/test_clients.py +265 -0
  356. pygeai/tests/evaluation/plan/__init__.py +0 -0
  357. pygeai/tests/evaluation/plan/test_clients.py +195 -0
  358. pygeai/tests/evaluation/result/__init__.py +0 -0
  359. pygeai/tests/evaluation/result/test_clients.py +66 -0
  360. pygeai/tests/gam/__init__.py +0 -0
  361. pygeai/tests/gam/test_clients.py +195 -0
  362. pygeai/tests/health/__init__.py +0 -0
  363. pygeai/tests/health/test_clients.py +41 -0
  364. pygeai/tests/integration/__init__.py +0 -0
  365. pygeai/tests/integration/assistants/__init__.py +0 -0
  366. pygeai/tests/integration/assistants/rag/__init__.py +0 -0
  367. pygeai/tests/integration/assistants/rag/test_create_rag.py +91 -0
  368. pygeai/tests/integration/chat/__init__.py +0 -0
  369. pygeai/tests/integration/chat/test_generate_image.py +158 -0
  370. pygeai/tests/integration/lab/__init__.py +0 -0
  371. pygeai/tests/integration/lab/agents/__init__.py +0 -0
  372. pygeai/tests/integration/lab/agents/test_agents_list.py +106 -0
  373. pygeai/tests/integration/lab/agents/test_create_agent.py +319 -0
  374. pygeai/tests/integration/lab/agents/test_create_sharing_link.py +70 -0
  375. pygeai/tests/integration/lab/agents/test_delete_agent.py +75 -0
  376. pygeai/tests/integration/lab/agents/test_get_agent.py +94 -0
  377. pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +127 -0
  378. pygeai/tests/integration/lab/agents/test_update_agent.py +250 -0
  379. pygeai/tests/integration/lab/processes/__init__.py +0 -0
  380. pygeai/tests/integration/lab/processes/test_create_process.py +345 -0
  381. pygeai/tests/integration/lab/processes/test_create_task.py +211 -0
  382. pygeai/tests/integration/lab/processes/test_delete_process.py +111 -0
  383. pygeai/tests/integration/lab/processes/test_get_process.py +201 -0
  384. pygeai/tests/integration/lab/processes/test_list_process_instances.py +91 -0
  385. pygeai/tests/integration/lab/processes/test_list_processes.py +138 -0
  386. pygeai/tests/integration/lab/processes/test_publish_process_revision.py +232 -0
  387. pygeai/tests/integration/lab/processes/test_update_process.py +289 -0
  388. pygeai/tests/integration/lab/reasoning_strategies/__init__.py +0 -0
  389. pygeai/tests/integration/lab/reasoning_strategies/test_get_reasoning_strategy.py +70 -0
  390. pygeai/tests/integration/lab/reasoning_strategies/test_list_reasoning_strategies.py +93 -0
  391. pygeai/tests/integration/lab/reasoning_strategies/test_update_reasoning_strategy.py +149 -0
  392. pygeai/tests/integration/lab/tools/__init__.py +0 -0
  393. pygeai/tests/integration/lab/tools/test_create_tool.py +288 -0
  394. pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
  395. pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -0
  396. pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
  397. pygeai/tests/integration/lab/tools/test_list_tools.py +106 -0
  398. pygeai/tests/integration/lab/tools/test_publish_tool_revision.py +119 -0
  399. pygeai/tests/integration/lab/tools/test_set_parameter.py +114 -0
  400. pygeai/tests/integration/lab/tools/test_update_tool.py +267 -0
  401. pygeai/tests/lab/agents/__init__.py +0 -0
  402. pygeai/tests/lab/agents/test_clients.py +481 -0
  403. pygeai/tests/lab/agents/test_mappers.py +440 -0
  404. pygeai/tests/lab/processes/__init__.py +0 -0
  405. pygeai/tests/lab/processes/test_clients.py +1416 -0
  406. pygeai/tests/lab/processes/test_mappers.py +1092 -0
  407. pygeai/tests/lab/spec/__init__.py +0 -0
  408. pygeai/tests/lab/spec/test_loader.py +59 -0
  409. pygeai/tests/lab/spec/test_parsers.py +182 -0
  410. pygeai/tests/lab/strategies/__init__.py +0 -0
  411. pygeai/tests/lab/strategies/test_clients.py +241 -0
  412. pygeai/tests/lab/strategies/test_mappers.py +132 -0
  413. pygeai/tests/lab/test_managers.py +553 -0
  414. pygeai/tests/lab/test_models.py +500 -3
  415. pygeai/tests/lab/tools/__init__.py +0 -0
  416. pygeai/tests/lab/tools/test_clients.py +521 -0
  417. pygeai/tests/lab/tools/test_mappers.py +198 -0
  418. pygeai/tests/migration/__init__.py +0 -0
  419. pygeai/tests/migration/test_strategies.py +405 -0
  420. pygeai/tests/migration/test_tools.py +159 -0
  421. pygeai/tests/organization/limits/test_clients.py +567 -0
  422. pygeai/tests/organization/limits/test_managers.py +298 -56
  423. pygeai/tests/organization/test_clients.py +600 -30
  424. pygeai/tests/organization/test_managers.py +424 -0
  425. pygeai/tests/organization/test_mappers.py +153 -0
  426. pygeai/tests/organization/test_responses.py +137 -0
  427. pygeai/tests/proxy/__init__.py +1 -0
  428. pygeai/tests/proxy/test_clients.py +397 -0
  429. pygeai/tests/proxy/test_config.py +171 -0
  430. pygeai/tests/proxy/test_integration.py +305 -0
  431. pygeai/tests/proxy/test_managers.py +312 -0
  432. pygeai/tests/proxy/test_servers.py +387 -0
  433. pygeai/tests/proxy/test_tool.py +176 -0
  434. pygeai/tests/snippets/analytics/__init__.py +0 -0
  435. pygeai/tests/snippets/analytics/get_agent_usage_per_user.py +16 -0
  436. pygeai/tests/snippets/analytics/get_agents_created_and_modified.py +11 -0
  437. pygeai/tests/snippets/analytics/get_average_cost_per_request.py +10 -0
  438. pygeai/tests/snippets/analytics/get_overall_error_rate.py +10 -0
  439. pygeai/tests/snippets/analytics/get_top_10_agents_by_requests.py +12 -0
  440. pygeai/tests/snippets/analytics/get_total_active_users.py +10 -0
  441. pygeai/tests/snippets/analytics/get_total_cost.py +10 -0
  442. pygeai/tests/snippets/analytics/get_total_requests_per_day.py +12 -0
  443. pygeai/tests/snippets/analytics/get_total_tokens.py +12 -0
  444. pygeai/tests/snippets/auth/__init__.py +0 -0
  445. pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
  446. pygeai/tests/snippets/chat/get_response.py +15 -0
  447. pygeai/tests/snippets/chat/get_response_complete_example.py +67 -0
  448. pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
  449. pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
  450. pygeai/tests/snippets/chat/get_response_with_instructions.py +19 -0
  451. pygeai/tests/snippets/chat/get_response_with_metadata.py +24 -0
  452. pygeai/tests/snippets/chat/get_response_with_parallel_tools.py +58 -0
  453. pygeai/tests/snippets/chat/get_response_with_reasoning.py +21 -0
  454. pygeai/tests/snippets/chat/get_response_with_store.py +38 -0
  455. pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
  456. pygeai/tests/snippets/chat/get_response_with_truncation.py +24 -0
  457. pygeai/tests/snippets/dbg/__init__.py +0 -0
  458. pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
  459. pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
  460. pygeai/tests/snippets/dbg/file_debugging.py +72 -0
  461. pygeai/tests/snippets/dbg/module_debugging.py +61 -0
  462. pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
  463. pygeai/tests/snippets/dbg/stepping_example.py +40 -0
  464. pygeai/tests/snippets/embeddings/cache_example.py +31 -0
  465. pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
  466. pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
  467. pygeai/tests/snippets/embeddings/openai_example.py +30 -0
  468. pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
  469. pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
  470. pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
  471. pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
  472. pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
  473. pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
  474. pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
  475. pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
  476. pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
  477. pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
  478. pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
  479. pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
  480. pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
  481. pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
  482. pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
  483. pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
  484. pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
  485. pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
  486. pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
  487. pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
  488. pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
  489. pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
  490. pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
  491. pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
  492. pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
  493. pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
  494. pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
  495. pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
  496. pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
  497. pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
  498. pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
  499. pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
  500. pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
  501. pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
  502. pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
  503. pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
  504. pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
  505. pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
  506. pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
  507. pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
  508. pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
  509. pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
  510. pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
  511. pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
  512. pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
  513. pygeai/tests/snippets/files/delete_file.py +1 -4
  514. pygeai/tests/snippets/files/get_file_content.py +2 -4
  515. pygeai/tests/snippets/files/get_file_data.py +1 -4
  516. pygeai/tests/snippets/files/get_file_list.py +1 -6
  517. pygeai/tests/snippets/files/upload_file.py +1 -5
  518. pygeai/tests/snippets/gam/gam_access_token.py +87 -0
  519. pygeai/tests/snippets/lab/agentic_flow_example_1.py +25 -23
  520. pygeai/tests/snippets/lab/agentic_flow_example_4.py +23 -23
  521. pygeai/tests/snippets/lab/agents/create_agent.py +5 -8
  522. pygeai/tests/snippets/lab/agents/create_agent_2.py +1 -5
  523. pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
  524. pygeai/tests/snippets/lab/agents/create_agent_with_permissions.py +39 -0
  525. pygeai/tests/snippets/lab/agents/create_agent_with_properties.py +46 -0
  526. pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
  527. pygeai/tests/snippets/lab/agents/delete_agent.py +1 -5
  528. pygeai/tests/snippets/lab/agents/get_agent.py +2 -11
  529. pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
  530. pygeai/tests/snippets/lab/agents/get_sharing_link.py +2 -7
  531. pygeai/tests/snippets/lab/agents/list_agents.py +4 -7
  532. pygeai/tests/snippets/lab/agents/publish_agent_revision.py +2 -6
  533. pygeai/tests/snippets/lab/agents/update_agent.py +1 -5
  534. pygeai/tests/snippets/lab/agents/update_agent_properties.py +50 -0
  535. pygeai/tests/snippets/lab/assistant_to_agent.py +191 -0
  536. pygeai/tests/snippets/lab/crud_ui.py +462 -0
  537. pygeai/tests/snippets/lab/processes/create_process.py +3 -5
  538. pygeai/tests/snippets/lab/processes/create_task.py +3 -5
  539. pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +10 -19
  540. pygeai/tests/snippets/lab/processes/kbs/create_kb.py +2 -5
  541. pygeai/tests/snippets/lab/processes/kbs/get_kb.py +10 -16
  542. pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +13 -20
  543. pygeai/tests/snippets/lab/processes/kbs/try_all.py +5 -7
  544. pygeai/tests/snippets/lab/processes/list_processes.py +5 -7
  545. pygeai/tests/snippets/lab/runner_1.py +1 -1
  546. pygeai/tests/snippets/lab/samples/summarize_files.py +3 -3
  547. pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +2 -5
  548. pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +2 -5
  549. pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +3 -6
  550. pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +2 -5
  551. pygeai/tests/snippets/lab/tools/create_tool.py +4 -10
  552. pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
  553. pygeai/tests/snippets/lab/tools/delete_tool.py +2 -6
  554. pygeai/tests/snippets/lab/tools/get_parameter.py +5 -7
  555. pygeai/tests/snippets/lab/tools/get_tool.py +5 -7
  556. pygeai/tests/snippets/lab/tools/list_tools.py +3 -7
  557. pygeai/tests/snippets/lab/tools/publish_tool_revision.py +3 -5
  558. pygeai/tests/snippets/lab/tools/set_parameters.py +4 -9
  559. pygeai/tests/snippets/lab/tools/update_tool.py +4 -8
  560. pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
  561. pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +1640 -0
  562. pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +4541 -0
  563. pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +133 -0
  564. pygeai/tests/snippets/lab/use_cases/create_web_designer.py +189 -0
  565. pygeai/tests/snippets/lab/use_cases/create_web_reader.py +185 -0
  566. pygeai/tests/snippets/lab/{file_summarizer_example.py → use_cases/file_summarizer_example.py} +3 -3
  567. pygeai/tests/snippets/lab/{file_summarizer_example_2.py → use_cases/file_summarizer_example_2.py} +12 -12
  568. pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +1773 -0
  569. pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +4541 -0
  570. pygeai/tests/snippets/lab/use_cases/update_web_designer.py +188 -0
  571. pygeai/tests/snippets/lab/use_cases/update_web_reader.py +195 -0
  572. pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +210 -0
  573. pygeai/tests/snippets/migrate/__init__.py +45 -0
  574. pygeai/tests/snippets/migrate/agent_migration.py +110 -0
  575. pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
  576. pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
  577. pygeai/tests/snippets/migrate/process_migration.py +64 -0
  578. pygeai/tests/snippets/migrate/project_migration.py +42 -0
  579. pygeai/tests/snippets/migrate/tool_migration.py +64 -0
  580. pygeai/tests/snippets/organization/add_project_member.py +10 -0
  581. pygeai/tests/snippets/organization/add_project_member_batch.py +44 -0
  582. pygeai/tests/snippets/organization/create_project.py +2 -2
  583. pygeai/tests/snippets/organization/get_memberships.py +12 -0
  584. pygeai/tests/snippets/organization/get_organization_members.py +6 -0
  585. pygeai/tests/snippets/organization/get_project_members.py +6 -0
  586. pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
  587. pygeai/tests/snippets/organization/get_project_roles.py +6 -0
  588. pygeai/vendor/a2a/__init__.py +1 -0
  589. pygeai/vendor/a2a/auth/__init__.py +0 -0
  590. pygeai/vendor/a2a/auth/user.py +31 -0
  591. pygeai/vendor/a2a/client/__init__.py +19 -0
  592. pygeai/vendor/a2a/client/client.py +425 -0
  593. pygeai/vendor/a2a/client/errors.py +33 -0
  594. pygeai/vendor/a2a/client/helpers.py +22 -0
  595. pygeai/vendor/a2a/py.typed +0 -0
  596. pygeai/vendor/a2a/server/__init__.py +1 -0
  597. pygeai/vendor/a2a/server/agent_execution/__init__.py +18 -0
  598. pygeai/vendor/a2a/server/agent_execution/agent_executor.py +44 -0
  599. pygeai/vendor/a2a/server/agent_execution/context.py +155 -0
  600. pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +20 -0
  601. pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +77 -0
  602. pygeai/vendor/a2a/server/apps/__init__.py +16 -0
  603. pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +16 -0
  604. pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +88 -0
  605. pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +426 -0
  606. pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +123 -0
  607. pygeai/vendor/a2a/server/context.py +23 -0
  608. pygeai/vendor/a2a/server/events/__init__.py +21 -0
  609. pygeai/vendor/a2a/server/events/event_consumer.py +149 -0
  610. pygeai/vendor/a2a/server/events/event_queue.py +156 -0
  611. pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +85 -0
  612. pygeai/vendor/a2a/server/events/queue_manager.py +35 -0
  613. pygeai/vendor/a2a/server/request_handlers/__init__.py +20 -0
  614. pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +435 -0
  615. pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +327 -0
  616. pygeai/vendor/a2a/server/request_handlers/request_handler.py +161 -0
  617. pygeai/vendor/a2a/server/request_handlers/response_helpers.py +133 -0
  618. pygeai/vendor/a2a/server/tasks/__init__.py +20 -0
  619. pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +62 -0
  620. pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +51 -0
  621. pygeai/vendor/a2a/server/tasks/push_notifier.py +25 -0
  622. pygeai/vendor/a2a/server/tasks/result_aggregator.py +151 -0
  623. pygeai/vendor/a2a/server/tasks/task_manager.py +253 -0
  624. pygeai/vendor/a2a/server/tasks/task_store.py +22 -0
  625. pygeai/vendor/a2a/server/tasks/task_updater.py +155 -0
  626. pygeai/vendor/a2a/types.py +1624 -0
  627. pygeai/vendor/a2a/utils/__init__.py +40 -0
  628. pygeai/vendor/a2a/utils/artifact.py +72 -0
  629. pygeai/vendor/a2a/utils/errors.py +69 -0
  630. pygeai/vendor/a2a/utils/helpers.py +176 -0
  631. pygeai/vendor/a2a/utils/message.py +83 -0
  632. pygeai/vendor/a2a/utils/task.py +57 -0
  633. pygeai/vendor/a2a/utils/telemetry.py +299 -0
  634. pygeai-0.6.0b15.dist-info/METADATA +205 -0
  635. pygeai-0.6.0b15.dist-info/RECORD +799 -0
  636. {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
  637. {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/entry_points.txt +2 -1
  638. {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/licenses/LICENSE +13 -1
  639. pygeai-0.6.0b15.dist-info/top_level.txt +1 -0
  640. docs/geai-proxy/README.md +0 -145
  641. docs/source/conf.py +0 -45
  642. pygeai/tests/core/test_managers.py +0 -233
  643. pygeai-0.1.51b3.dist-info/METADATA +0 -130
  644. pygeai-0.1.51b3.dist-info/RECORD +0 -324
  645. pygeai-0.1.51b3.dist-info/top_level.txt +0 -3
  646. scripts/bump_beta_version.py +0 -56
  647. {scripts → pygeai/analytics}/__init__.py +0 -0
  648. /pygeai/tests/snippets/lab/{c_code_fixer_agent_flow.py → use_cases/c_code_fixer_agent_flow.py} +0 -0
@@ -1,15 +1,14 @@
1
1
  import json
2
- import sys
3
- from json import JSONDecodeError
4
2
  from pathlib import Path
5
3
 
6
4
  from pygeai.assistant.rag.clients import RAGAssistantClient
7
5
  from pygeai.cli.commands import Command, Option, ArgumentsEnum
8
6
  from pygeai.cli.commands.builders import build_help_text
9
- from pygeai.cli.commands.common import get_messages, get_welcome_data, get_search_options, get_boolean_value, \
7
+ from pygeai.cli.commands.common import get_welcome_data, get_search_options, get_boolean_value, \
10
8
  get_welcome_data_feature_list, get_welcome_data_example_prompt, get_index_options
11
9
  from pygeai.cli.texts.help import RAG_ASSISTANT_HELP_TEXT
12
10
  from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
11
+ from pygeai.core.utils.console import Console
13
12
 
14
13
 
15
14
  def show_help():
@@ -17,13 +16,13 @@ def show_help():
17
16
  Displays help text in stdout
18
17
  """
19
18
  help_text = build_help_text(rag_commands, RAG_ASSISTANT_HELP_TEXT)
20
- sys.stdout.write(help_text)
19
+ Console.write_stdout(help_text)
21
20
 
22
21
 
23
22
  def get_assistants_from_project():
24
23
  client = RAGAssistantClient()
25
24
  result = client.get_assistants_from_project()
26
- sys.stdout.write(f"RAG Assistants in project: \n{result}\n")
25
+ Console.write_stdout(f"RAG Assistants in project: \n{result}")
27
26
 
28
27
 
29
28
  def get_assistant_detail(option_list: list):
@@ -37,7 +36,7 @@ def get_assistant_detail(option_list: list):
37
36
 
38
37
  client = RAGAssistantClient()
39
38
  result = client.get_assistant_data(name)
40
- sys.stdout.write(f"Assistant detail: \n{result}\n")
39
+ Console.write_stdout(f"Assistant detail: \n{result}")
41
40
 
42
41
 
43
42
  assistant_detail_options = [
@@ -266,7 +265,7 @@ def create_assistant(option_list: list):
266
265
  index_options=index_options,
267
266
  welcome_data=welcome_data
268
267
  )
269
- sys.stdout.write(f"New RAG Assistant: \n{result}\n")
268
+ Console.write_stdout(f"New RAG Assistant: \n{result}")
270
269
 
271
270
 
272
271
  create_assistant_options = [
@@ -687,7 +686,7 @@ def update_assistant(option_list: list):
687
686
  search_options=search_options,
688
687
  welcome_data=welcome_data
689
688
  )
690
- sys.stdout.write(f"Updated RAG Assistant: \n{result}\n")
689
+ Console.write_stdout(f"Updated RAG Assistant: \n{result}")
691
690
 
692
691
 
693
692
  update_assistant_options = [
@@ -907,7 +906,7 @@ def delete_assistant(option_list: list):
907
906
 
908
907
  client = RAGAssistantClient()
909
908
  result = client.delete_assistant(name)
910
- sys.stdout.write(f"Deleted assistant: \n{result}\n")
909
+ Console.write_stdout(f"Deleted assistant: \n{result}")
911
910
 
912
911
 
913
912
  delete_assistant_options = [
@@ -941,7 +940,7 @@ def list_documents(option_list: list):
941
940
  skip=skip,
942
941
  count=count
943
942
  )
944
- sys.stdout.write(f"Assistant's documents: \n{result}\n")
943
+ Console.write_stdout(f"Assistant's documents: \n{result}")
945
944
 
946
945
 
947
946
  list_documents_options = [
@@ -979,7 +978,7 @@ def delete_all_documents(option_list: list):
979
978
  result = client.delete_all_documents(
980
979
  name=name,
981
980
  )
982
- sys.stdout.write(f"Deleted documents: \n{result}\n")
981
+ Console.write_stdout(f"Deleted documents: \n{result}")
983
982
 
984
983
 
985
984
  delete_all_documents_options = [
@@ -1009,7 +1008,7 @@ def get_document_data(option_list: list):
1009
1008
  name=name,
1010
1009
  document_id=document_id
1011
1010
  )
1012
- sys.stdout.write(f"Document detail: \n{result}\n")
1011
+ Console.write_stdout(f"Document detail: \n{result}")
1013
1012
 
1014
1013
 
1015
1014
  get_document_data_options = [
@@ -1064,7 +1063,7 @@ def upload_document(option_list: list):
1064
1063
  metadata=metadata,
1065
1064
  content_type=content_type
1066
1065
  )
1067
- sys.stdout.write(f"Uploaded: \n{result}\n")
1066
+ Console.write_stdout(f"Uploaded: \n{result}")
1068
1067
 
1069
1068
 
1070
1069
  upload_document_options = [
@@ -1119,7 +1118,7 @@ def delete_document(option_list: list):
1119
1118
  name=name,
1120
1119
  document_id=document_id
1121
1120
  )
1122
- sys.stdout.write(f"Deleted document: \n{result}\n")
1121
+ Console.write_stdout(f"Deleted document: \n{result}")
1123
1122
 
1124
1123
 
1125
1124
  delete_document_options = [
@@ -1,12 +1,10 @@
1
1
  import json
2
- import sys
3
-
4
2
  from pygeai.cli.commands import Command, Option, ArgumentsEnum
5
3
  from pygeai.cli.commands.builders import build_help_text
6
- from pygeai.cli.commands.common import get_messages, get_boolean_value, get_penalty_float_value
7
4
  from pygeai.cli.texts.help import RERANK_HELP_TEXT
8
5
  from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
9
6
  from pygeai.core.rerank.clients import RerankClient
7
+ from pygeai.core.utils.console import Console
10
8
 
11
9
 
12
10
  def show_help():
@@ -14,7 +12,7 @@ def show_help():
14
12
  Displays help text in stdout
15
13
  """
16
14
  help_text = build_help_text(rerank_commands, RERANK_HELP_TEXT)
17
- sys.stdout.write(help_text)
15
+ Console.write_stdout(help_text)
18
16
 
19
17
 
20
18
  def rerank_chunks(option_list: list):
@@ -55,7 +53,7 @@ def rerank_chunks(option_list: list):
55
53
  documents=documents,
56
54
  top_n=top_n
57
55
  )
58
- sys.stdout.write(f"Rerank details: \n{result}\n")
56
+ Console.write_stdout(f"Rerank details: \n{result}")
59
57
 
60
58
 
61
59
  rerank_chunks_options = [
@@ -1,12 +1,11 @@
1
1
  import json
2
- import sys
3
2
 
4
3
  from pygeai.cli.commands import Command, Option, ArgumentsEnum
5
4
  from pygeai.cli.commands.builders import build_help_text
6
- from pygeai.cli.commands.common import get_messages, get_boolean_value, get_penalty_float_value
7
5
  from pygeai.cli.texts.help import SECRETS_HELP_TEXT
8
6
  from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
9
7
  from pygeai.core.secrets.clients import SecretClient
8
+ from pygeai.core.utils.console import Console
10
9
 
11
10
 
12
11
  def show_help():
@@ -14,7 +13,7 @@ def show_help():
14
13
  Displays help text in stdout
15
14
  """
16
15
  help_text = build_help_text(secrets_commands, SECRETS_HELP_TEXT)
17
- sys.stdout.write(help_text)
16
+ Console.write_stdout(help_text)
18
17
 
19
18
 
20
19
  def get_secret(option_list: list):
@@ -32,7 +31,7 @@ def get_secret(option_list: list):
32
31
 
33
32
  client = SecretClient()
34
33
  result = client.get_secret(secret_id=secret_id)
35
- sys.stdout.write(f"Get secret result: \n{result}\n")
34
+ Console.write_stdout(f"Get secret result: \n{result}")
36
35
 
37
36
 
38
37
  get_secret_options = [
@@ -70,7 +69,7 @@ def create_secret(option_list: list):
70
69
  secret_string=secret_string,
71
70
  description=description
72
71
  )
73
- sys.stdout.write(f"Create secret result: \n{result}\n")
72
+ Console.write_stdout(f"Create secret result: \n{result}")
74
73
 
75
74
 
76
75
  create_secret_options = [
@@ -124,7 +123,7 @@ def update_secret(option_list: list):
124
123
  secret_string=secret_string,
125
124
  description=description
126
125
  )
127
- sys.stdout.write(f"Update secret result: \n{result}\n")
126
+ Console.write_stdout(f"Update secret result: \n{result}")
128
127
 
129
128
 
130
129
  update_secret_options = [
@@ -187,7 +186,7 @@ def list_secrets(option_list: list):
187
186
  start=start,
188
187
  count=count
189
188
  )
190
- sys.stdout.write(f"List secrets result: \n{result}\n")
189
+ Console.write_stdout(f"List secrets result: \n{result}")
191
190
 
192
191
 
193
192
  list_secrets_options = [
@@ -244,7 +243,7 @@ def set_secret_accesses(option_list: list):
244
243
  secret_id=secret_id,
245
244
  access_list=access_list
246
245
  )
247
- sys.stdout.write(f"Set secret accesses result: \n{result}\n")
246
+ Console.write_stdout(f"Set secret accesses result: \n{result}")
248
247
 
249
248
 
250
249
  set_secret_accesses_options = [
@@ -278,7 +277,7 @@ def get_secret_accesses(option_list: list):
278
277
 
279
278
  client = SecretClient()
280
279
  result = client.get_secret_accesses(secret_id=secret_id)
281
- sys.stdout.write(f"Get secret accesses result: \n{result}\n")
280
+ Console.write_stdout(f"Get secret accesses result: \n{result}")
282
281
 
283
282
 
284
283
  get_secret_accesses_options = [
@@ -1,13 +1,11 @@
1
- import sys
2
-
3
- from pygeai.cli.commands import Command, Option, ArgumentsEnum
1
+ from pygeai.cli.commands import Command, ArgumentsEnum
4
2
  from pygeai.cli.commands.builders import build_help_text
5
3
  from pygeai.cli.commands.options import ORGANIZATION_OPTION, SUBSCRIPTION_TYPE_OPTION, USAGE_LIMIT_USAGE_UNIT_OPTION, \
6
4
  USAGE_LIMIT_SOFT_LIMIT_OPTION, USAGE_LIMIT_HARD_LIMIT_OPTION, USAGE_LIMIT_RENEWAL_STATUS_OPTION, \
7
5
  USAGE_LIMIT_ID_OPTION, PROJECT_OPTION
8
6
  from pygeai.cli.texts.help import USAGE_LIMIT_HELP_TEXT
9
7
  from pygeai.core.common.exceptions import MissingRequirementException
10
- from pygeai.organization.clients import OrganizationClient
8
+ from pygeai.core.utils.console import Console
11
9
  from pygeai.organization.limits.clients import UsageLimitClient
12
10
 
13
11
 
@@ -16,7 +14,7 @@ def show_help():
16
14
  Displays help text in stdout
17
15
  """
18
16
  help_text = build_help_text(usage_limit_commands, USAGE_LIMIT_HELP_TEXT)
19
- sys.stdout.write(help_text)
17
+ Console.write_stdout(help_text)
20
18
 
21
19
 
22
20
  def set_organization_usage_limit(option_list: list):
@@ -59,7 +57,7 @@ def set_organization_usage_limit(option_list: list):
59
57
  organization=organization,
60
58
  usage_limit=usage_limit
61
59
  )
62
- sys.stdout.write(f"Organization usage limit: \n{result}\n")
60
+ Console.write_stdout(f"Organization usage limit: \n{result}")
63
61
 
64
62
 
65
63
  set_organization_usage_limit_options = [
@@ -86,7 +84,7 @@ def get_organization_latest_usage_limit(option_list: list):
86
84
  result = client.get_organization_latest_usage_limit(
87
85
  organization=organization,
88
86
  )
89
- sys.stdout.write(f"Organization usage limit: \n{result}\n")
87
+ Console.write_stdout(f"Organization usage limit: \n{result}")
90
88
 
91
89
 
92
90
  get_organization_latest_usage_limit_options = [
@@ -108,7 +106,7 @@ def get_all_usage_limits_from_organization(option_list: list):
108
106
  result = client.get_all_usage_limits_from_organization(
109
107
  organization=organization,
110
108
  )
111
- sys.stdout.write(f"Organization usage limits: \n{result}\n")
109
+ Console.write_stdout(f"Organization usage limits: \n{result}")
112
110
 
113
111
 
114
112
  get_all_usage_limits_from_organization_options = [
@@ -134,7 +132,7 @@ def delete_usage_limit_from_organization(option_list: list):
134
132
  organization=organization,
135
133
  limit_id=limit_id
136
134
  )
137
- sys.stdout.write(f"Deleted usage limit: \n{result}\n")
135
+ Console.write_stdout(f"Deleted usage limit: \n{result}")
138
136
 
139
137
 
140
138
  delete_usage_limit_from_organization_options = [
@@ -195,7 +193,7 @@ def set_organization_hard_limit(organization, limit_id, hard_limit):
195
193
  limit_id=limit_id,
196
194
  hard_limit=hard_limit
197
195
  )
198
- sys.stdout.write(f"Organization hard limit: \n{result}\n")
196
+ Console.write_stdout(f"Organization hard limit: \n{result}")
199
197
 
200
198
 
201
199
  def set_organization_soft_limit(organization, limit_id, soft_limit):
@@ -205,7 +203,7 @@ def set_organization_soft_limit(organization, limit_id, soft_limit):
205
203
  limit_id=limit_id,
206
204
  soft_limit=soft_limit
207
205
  )
208
- sys.stdout.write(f"Organization soft limit: \n{result}\n")
206
+ Console.write_stdout(f"Organization soft limit: \n{result}")
209
207
 
210
208
 
211
209
  def set_organization_renewal_status(organization, limit_id, renewal_status):
@@ -215,7 +213,7 @@ def set_organization_renewal_status(organization, limit_id, renewal_status):
215
213
  limit_id=limit_id,
216
214
  renewal_status=renewal_status
217
215
  )
218
- sys.stdout.write(f"Organization renewal status: \n{result}\n")
216
+ Console.write_stdout(f"Organization renewal status: \n{result}")
219
217
 
220
218
 
221
219
  def set_project_usage_limit(option_list: list):
@@ -263,7 +261,7 @@ def set_project_usage_limit(option_list: list):
263
261
  project=project,
264
262
  usage_limit=usage_limit
265
263
  )
266
- sys.stdout.write(f"Project usage limit: \n{result}\n")
264
+ Console.write_stdout(f"Project usage limit: \n{result}")
267
265
 
268
266
 
269
267
  set_project_usage_limit_options = [
@@ -295,7 +293,7 @@ def get_all_usage_limits_from_project(option_list: list):
295
293
  organization=organization,
296
294
  project=project
297
295
  )
298
- sys.stdout.write(f"Project usage limits: \n{result}\n")
296
+ Console.write_stdout(f"Project usage limits: \n{result}")
299
297
 
300
298
 
301
299
  get_all_usage_limits_from_project_options = [
@@ -322,7 +320,7 @@ def get_latest_usage_limit_from_project(option_list: list):
322
320
  organization=organization,
323
321
  project=project
324
322
  )
325
- sys.stdout.write(f"Project's latest usage limit: \n{result}\n")
323
+ Console.write_stdout(f"Project's latest usage limit: \n{result}")
326
324
 
327
325
 
328
326
  get_latest_usage_limit_from_project_options = [
@@ -349,7 +347,7 @@ def get_active_usage_limit_from_project(option_list: list):
349
347
  organization=organization,
350
348
  project=project
351
349
  )
352
- sys.stdout.write(f"Project's latest usage limit: \n{result}\n")
350
+ Console.write_stdout(f"Project's latest usage limit: \n{result}")
353
351
 
354
352
 
355
353
  get_active_usage_limit_from_project_options = [
@@ -380,7 +378,7 @@ def delete_usage_limit_from_project(option_list: list):
380
378
  project=project,
381
379
  limit_id=limit_id
382
380
  )
383
- sys.stdout.write(f"Deleted usage limit: \n{result}\n")
381
+ Console.write_stdout(f"Deleted usage limit: \n{result}")
384
382
 
385
383
 
386
384
  delete_usage_limit_from_project_options = [
@@ -447,7 +445,7 @@ def set_project_hard_limit(organization, project, limit_id, hard_limit):
447
445
  limit_id=limit_id,
448
446
  hard_limit=hard_limit
449
447
  )
450
- sys.stdout.write(f"Project hard limit: \n{result}\n")
448
+ Console.write_stdout(f"Project hard limit: \n{result}")
451
449
 
452
450
 
453
451
  def set_project_soft_limit(organization, project, limit_id, soft_limit):
@@ -458,7 +456,7 @@ def set_project_soft_limit(organization, project, limit_id, soft_limit):
458
456
  limit_id=limit_id,
459
457
  soft_limit=soft_limit
460
458
  )
461
- sys.stdout.write(f"Project soft limit: \n{result}\n")
459
+ Console.write_stdout(f"Project soft limit: \n{result}")
462
460
 
463
461
 
464
462
  def set_project_renewal_status(organization, project, limit_id, renewal_status):
@@ -469,7 +467,7 @@ def set_project_renewal_status(organization, project, limit_id, renewal_status):
469
467
  limit_id=limit_id,
470
468
  renewal_status=renewal_status
471
469
  )
472
- sys.stdout.write(f"Project renewal status: \n{result}\n")
470
+ Console.write_stdout(f"Project renewal status: \n{result}")
473
471
 
474
472
 
475
473
  usage_limit_commands = [
@@ -1,6 +1,8 @@
1
1
  from pathlib import Path
2
+ from typing import Any, Dict, List, Optional, Union
3
+ import json
2
4
 
3
- from pygeai.core.common.exceptions import WrongArgumentError
5
+ from pygeai.core.common.exceptions import WrongArgumentError, ValidationError
4
6
 
5
7
 
6
8
  def validate_dataset_file(dataset_file: str):
@@ -64,3 +66,144 @@ def validate_system_metric(metric: dict):
64
66
 
65
67
  if not isinstance(metric["systemMetricWeight"], (int, float)) or not (0 <= metric["systemMetricWeight"] <= 1):
66
68
  raise WrongArgumentError('"systemMetricWeight" must be a number between 0 and 1 (inclusive).')
69
+
70
+
71
+ def validate_json_input(
72
+ value: str,
73
+ expected_type: type,
74
+ field_name: str,
75
+ example: Optional[str] = None
76
+ ) -> Union[Dict, List]:
77
+ """
78
+ Validates and parses JSON input with detailed error messages.
79
+
80
+ :param value: str - The JSON string to parse.
81
+ :param expected_type: type - Expected type (dict or list).
82
+ :param field_name: str - Name of the field being validated.
83
+ :param example: Optional[str] - Example of valid input.
84
+ :return: Union[Dict, List] - Parsed JSON object.
85
+ :raises ValidationError: If JSON is invalid or doesn't match expected type.
86
+ """
87
+ try:
88
+ parsed = json.loads(value)
89
+ except json.JSONDecodeError as e:
90
+ raise ValidationError(
91
+ f"Invalid JSON for '{field_name}'",
92
+ field=field_name,
93
+ expected="Valid JSON string",
94
+ received=value[:100] + "..." if len(value) > 100 else value,
95
+ example=example or '{"key": "value"}'
96
+ ) from e
97
+
98
+ if not isinstance(parsed, expected_type):
99
+ raise ValidationError(
100
+ f"Wrong type for '{field_name}'",
101
+ field=field_name,
102
+ expected=expected_type.__name__,
103
+ received=type(parsed).__name__,
104
+ example=example
105
+ )
106
+
107
+ return parsed
108
+
109
+
110
+ def validate_numeric_range(
111
+ value: str,
112
+ field_name: str,
113
+ min_value: Optional[float] = None,
114
+ max_value: Optional[float] = None,
115
+ value_type: type = float
116
+ ) -> Union[int, float]:
117
+ """
118
+ Validates numeric input within a specified range.
119
+
120
+ :param value: str - The numeric string to validate.
121
+ :param field_name: str - Name of the field being validated.
122
+ :param min_value: Optional[float] - Minimum allowed value.
123
+ :param max_value: Optional[float] - Maximum allowed value.
124
+ :param value_type: type - Expected numeric type (int or float).
125
+ :return: Union[int, float] - Validated numeric value.
126
+ :raises ValidationError: If value is not numeric or out of range.
127
+ """
128
+ try:
129
+ numeric_value = value_type(value)
130
+ except ValueError as e:
131
+ raise ValidationError(
132
+ f"Invalid {value_type.__name__} for '{field_name}'",
133
+ field=field_name,
134
+ expected=f"{value_type.__name__}",
135
+ received=value
136
+ ) from e
137
+
138
+ if min_value is not None and numeric_value < min_value:
139
+ raise ValidationError(
140
+ f"Value too low for '{field_name}'",
141
+ field=field_name,
142
+ expected=f">= {min_value}",
143
+ received=str(numeric_value)
144
+ )
145
+
146
+ if max_value is not None and numeric_value > max_value:
147
+ raise ValidationError(
148
+ f"Value too high for '{field_name}'",
149
+ field=field_name,
150
+ expected=f"<= {max_value}",
151
+ received=str(numeric_value)
152
+ )
153
+
154
+ return numeric_value
155
+
156
+
157
+ def validate_choice(
158
+ value: str,
159
+ field_name: str,
160
+ choices: List[str],
161
+ case_sensitive: bool = True
162
+ ) -> str:
163
+ """
164
+ Validates that input is one of the allowed choices.
165
+
166
+ :param value: str - The value to validate.
167
+ :param field_name: str - Name of the field being validated.
168
+ :param choices: List[str] - List of allowed values.
169
+ :param case_sensitive: bool - Whether comparison is case-sensitive.
170
+ :return: str - Validated value.
171
+ :raises ValidationError: If value is not in choices.
172
+ """
173
+ compare_value = value if case_sensitive else value.lower()
174
+ compare_choices = choices if case_sensitive else [c.lower() for c in choices]
175
+
176
+ if compare_value not in compare_choices:
177
+ raise ValidationError(
178
+ f"Invalid value for '{field_name}'",
179
+ field=field_name,
180
+ expected=f"One of: {', '.join(choices)}",
181
+ received=value
182
+ )
183
+
184
+ return value
185
+
186
+
187
+ def validate_boolean_value(value: str, field_name: str = "boolean option") -> bool:
188
+ """
189
+ Converts a string argument into a boolean value with flexible input formats.
190
+
191
+ :param value: str - A string representation of a boolean.
192
+ :param field_name: str - Name of the field being validated.
193
+ :return: bool - The boolean value corresponding to the input.
194
+ :raises ValidationError: If the input is not a valid boolean representation.
195
+ """
196
+ normalized = value.lower().strip()
197
+
198
+ if normalized in ("0", "false", "no", "off"):
199
+ return False
200
+ elif normalized in ("1", "true", "yes", "on"):
201
+ return True
202
+ else:
203
+ raise ValidationError(
204
+ f"Invalid boolean value for '{field_name}'",
205
+ field=field_name,
206
+ expected="0/1, true/false, yes/no, on/off",
207
+ received=value,
208
+ example="1 or true"
209
+ )
@@ -1,9 +1,9 @@
1
- import sys
2
-
3
1
  import requests
4
2
  import json
5
3
  from packaging.version import Version as LooseVersion
6
4
 
5
+ from pygeai.core.utils.console import Console
6
+
7
7
 
8
8
  def get_latest_version(package_name):
9
9
  url = f"https://pypi.org/pypi/{package_name}/json"
@@ -13,8 +13,7 @@ def get_latest_version(package_name):
13
13
  data = json.loads(response.text)
14
14
  return data['info']['version']
15
15
  except requests.RequestException as e:
16
- sys.stderr.write(f"An error occurred while fetching the latest version: {e}")
17
- return None
16
+ Console.write_stderr(f"An error occurred while fetching the latest version: {e}")
18
17
 
19
18
 
20
19
  def get_installed_version(package_name):
@@ -25,7 +24,7 @@ def get_installed_version(package_name):
25
24
  except importlib.metadata.PackageNotFoundError:
26
25
  return "Not installed"
27
26
  except ModuleNotFoundError:
28
- sys.stderr.write("This Python installation does not support importlib.metadata. Use Python 3.8+ or install importlib_metadata manually.")
27
+ Console.write_stderr("This Python installation does not support importlib.metadata. Use Python 3.8+ or install importlib_metadata manually.")
29
28
  return "Unknown"
30
29
 
31
30