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
pygeai/cli/__init__.py CHANGED
@@ -4,5 +4,4 @@ GEAI - ClI
4
4
  Command line interface to interact with Globant Enterprise AI.
5
5
  """
6
6
 
7
- __version__ = '0.1.51'
8
7
 
@@ -1,11 +1,9 @@
1
- import json
2
- import sys
3
-
4
1
  from pygeai.admin.clients import AdminClient
5
2
  from pygeai.cli.commands import Command, Option, ArgumentsEnum
6
3
  from pygeai.cli.commands.builders import build_help_text
7
4
  from pygeai.cli.texts.help import ADMIN_HELP_TEXT
8
5
  from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
6
+ from pygeai.core.utils.console import Console
9
7
 
10
8
 
11
9
  def show_help():
@@ -13,20 +11,19 @@ def show_help():
13
11
  Displays help text in stdout
14
12
  """
15
13
  help_text = build_help_text(admin_commands, ADMIN_HELP_TEXT)
16
- sys.stdout.write(help_text)
14
+ Console.write_stdout(help_text)
17
15
 
18
16
 
19
17
  def validate_api_token():
20
-
21
18
  client = AdminClient()
22
19
  result = client.validate_api_token()
23
- sys.stdout.write(f"API Token access detail: \n{result}\n")
20
+ Console.write_stdout(f"API Token access detail: \n{result}")
24
21
 
25
22
 
26
23
  def get_authorized_organizations():
27
24
  client = AdminClient()
28
25
  result = client.get_authorized_organizations()
29
- sys.stdout.write(f"Authorized organizations: \n{result}\n")
26
+ Console.write_stdout(f"Authorized organizations: \n{result}")
30
27
 
31
28
 
32
29
  def get_authorized_projects_by_organization(option_list: list):
@@ -42,7 +39,7 @@ def get_authorized_projects_by_organization(option_list: list):
42
39
  result = client.get_authorized_projects_by_organization(
43
40
  organization=organization
44
41
  )
45
- sys.stdout.write(f"Authorized projects detail: \n{result}\n")
42
+ Console.write_stdout(f"Authorized projects detail: \n{result}")
46
43
 
47
44
 
48
45
  authorized_projects_by_organization_options = [
@@ -77,7 +74,7 @@ def get_project_visibility(option_list: list):
77
74
  project=project,
78
75
  access_token=access_token
79
76
  )
80
- sys.stdout.write(f"Project visibility detail: \n{result}\n")
77
+ Console.write_stdout(f"Project visibility detail: \n{result}")
81
78
 
82
79
 
83
80
  project_visibility_options = [
@@ -124,7 +121,7 @@ def get_project_api_token(option_list: list):
124
121
  project=project,
125
122
  access_token=access_token
126
123
  )
127
- sys.stdout.write(f"Project API Token: \n{result}\n")
124
+ Console.write_stdout(f"Project API Token: \n{result}")
128
125
 
129
126
 
130
127
  project_api_token_options = [
@@ -0,0 +1,533 @@
1
+ from pygeai.cli.commands import Command, Option, ArgumentsEnum
2
+ from pygeai.cli.commands.builders import build_help_text
3
+ from pygeai.cli.texts.help import ANALYTICS_HELP_TEXT
4
+ from pygeai.core.common.exceptions import MissingRequirementException
5
+ from pygeai.core.utils.console import Console
6
+ from pygeai.analytics.managers import AnalyticsManager
7
+ import csv
8
+ from datetime import datetime, timedelta
9
+
10
+
11
+ def show_help():
12
+ help_text = build_help_text(analytics_commands, ANALYTICS_HELP_TEXT)
13
+ Console.write_stdout(help_text)
14
+
15
+
16
+ def get_default_date_range():
17
+ today = datetime.now()
18
+ first_day_current_month = today.replace(day=1)
19
+ last_day_last_month = first_day_current_month - timedelta(days=1)
20
+ first_day_last_month = last_day_last_month.replace(day=1)
21
+
22
+ start_date = first_day_last_month.strftime('%Y-%m-%d')
23
+ end_date = last_day_last_month.strftime('%Y-%m-%d')
24
+
25
+ return start_date, end_date
26
+
27
+
28
+ START_DATE_OPTION = Option(
29
+ "start_date",
30
+ ["--start-date", "-s"],
31
+ "Start date in YYYY-MM-DD format (defaults to first day of last month)",
32
+ True
33
+ )
34
+
35
+ END_DATE_OPTION = Option(
36
+ "end_date",
37
+ ["--end-date", "-e"],
38
+ "End date in YYYY-MM-DD format (defaults to last day of last month)",
39
+ True
40
+ )
41
+
42
+ AGENT_NAME_OPTION = Option(
43
+ "agent_name",
44
+ ["--agent-name", "-a"],
45
+ "Name of the agent to filter results",
46
+ True
47
+ )
48
+
49
+ CSV_EXPORT_OPTION = Option(
50
+ "csv_file",
51
+ ["--csv", "-c"],
52
+ "Export results to CSV file",
53
+ True
54
+ )
55
+
56
+
57
+ def get_agents_created_and_modified(option_list: list):
58
+ start_date = None
59
+ end_date = None
60
+ for option_flag, option_arg in option_list:
61
+ if option_flag.name == "start_date":
62
+ start_date = option_arg
63
+ if option_flag.name == "end_date":
64
+ end_date = option_arg
65
+
66
+ if not start_date or not end_date:
67
+ start_date, end_date = get_default_date_range()
68
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
69
+
70
+ manager = AnalyticsManager()
71
+ result = manager.get_agents_created_and_modified(start_date, end_date)
72
+ Console.write_stdout(f"Agents created and modified:\n Created: {result.createdAgents}\n Modified: {result.modifiedAgents}")
73
+
74
+
75
+ agents_created_options = [START_DATE_OPTION, END_DATE_OPTION]
76
+
77
+
78
+ def get_total_requests_per_day(option_list: list):
79
+ start_date = None
80
+ end_date = None
81
+ agent_name = None
82
+ for option_flag, option_arg in option_list:
83
+ if option_flag.name == "start_date":
84
+ start_date = option_arg
85
+ if option_flag.name == "end_date":
86
+ end_date = option_arg
87
+ if option_flag.name == "agent_name":
88
+ agent_name = option_arg
89
+
90
+ if not start_date or not end_date:
91
+ start_date, end_date = get_default_date_range()
92
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
93
+
94
+ manager = AnalyticsManager()
95
+ result = manager.get_total_requests_per_day(start_date, end_date, agent_name)
96
+ Console.write_stdout(f"Total requests per day:")
97
+ for item in result.requestsPerDay:
98
+ Console.write_stdout(f" {item.date}: {item.totalRequests} requests ({item.totalRequestsWithError} errors)")
99
+
100
+
101
+ total_requests_per_day_options = [START_DATE_OPTION, END_DATE_OPTION, AGENT_NAME_OPTION]
102
+
103
+
104
+ def get_total_cost(option_list: list):
105
+ start_date = None
106
+ end_date = None
107
+ for option_flag, option_arg in option_list:
108
+ if option_flag.name == "start_date":
109
+ start_date = option_arg
110
+ if option_flag.name == "end_date":
111
+ end_date = option_arg
112
+
113
+ if not start_date or not end_date:
114
+ start_date, end_date = get_default_date_range()
115
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
116
+
117
+ manager = AnalyticsManager()
118
+ result = manager.get_total_cost(start_date, end_date)
119
+ Console.write_stdout(f"Total cost: ${result.totalCost:.2f}")
120
+
121
+
122
+ total_cost_options = [START_DATE_OPTION, END_DATE_OPTION]
123
+
124
+
125
+ def get_average_cost_per_request(option_list: list):
126
+ start_date = None
127
+ end_date = None
128
+ for option_flag, option_arg in option_list:
129
+ if option_flag.name == "start_date":
130
+ start_date = option_arg
131
+ if option_flag.name == "end_date":
132
+ end_date = option_arg
133
+
134
+ if not start_date or not end_date:
135
+ start_date, end_date = get_default_date_range()
136
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
137
+
138
+ manager = AnalyticsManager()
139
+ result = manager.get_average_cost_per_request(start_date, end_date)
140
+ Console.write_stdout(f"Average cost per request: ${result.averageCost:.4f}")
141
+
142
+
143
+ average_cost_per_request_options = [START_DATE_OPTION, END_DATE_OPTION]
144
+
145
+
146
+ def get_total_tokens(option_list: list):
147
+ start_date = None
148
+ end_date = None
149
+ for option_flag, option_arg in option_list:
150
+ if option_flag.name == "start_date":
151
+ start_date = option_arg
152
+ if option_flag.name == "end_date":
153
+ end_date = option_arg
154
+
155
+ if not start_date or not end_date:
156
+ start_date, end_date = get_default_date_range()
157
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
158
+
159
+ manager = AnalyticsManager()
160
+ result = manager.get_total_tokens(start_date, end_date)
161
+ Console.write_stdout(f"Total tokens:\n Input: {result.totalInputTokens}\n Output: {result.totalOutputTokens}\n Total: {result.totalTokens}")
162
+
163
+
164
+ total_tokens_options = [START_DATE_OPTION, END_DATE_OPTION]
165
+
166
+
167
+ def get_overall_error_rate(option_list: list):
168
+ start_date = None
169
+ end_date = None
170
+ for option_flag, option_arg in option_list:
171
+ if option_flag.name == "start_date":
172
+ start_date = option_arg
173
+ if option_flag.name == "end_date":
174
+ end_date = option_arg
175
+
176
+ if not start_date or not end_date:
177
+ start_date, end_date = get_default_date_range()
178
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
179
+
180
+ manager = AnalyticsManager()
181
+ result = manager.get_overall_error_rate(start_date, end_date)
182
+ Console.write_stdout(f"Overall error rate: {result.errorRate:.2%}")
183
+
184
+
185
+ error_rate_options = [START_DATE_OPTION, END_DATE_OPTION]
186
+
187
+
188
+ def get_top_agents_by_requests(option_list: list):
189
+ start_date = None
190
+ end_date = None
191
+ for option_flag, option_arg in option_list:
192
+ if option_flag.name == "start_date":
193
+ start_date = option_arg
194
+ if option_flag.name == "end_date":
195
+ end_date = option_arg
196
+
197
+ if not start_date or not end_date:
198
+ start_date, end_date = get_default_date_range()
199
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
200
+
201
+ manager = AnalyticsManager()
202
+ result = manager.get_top_10_agents_by_requests(start_date, end_date)
203
+ Console.write_stdout("Top 10 agents by requests:")
204
+ for idx, agent in enumerate(result.topAgents, 1):
205
+ Console.write_stdout(f" {idx}. {agent.agentName}: {agent.totalRequests} requests")
206
+
207
+
208
+ top_agents_options = [START_DATE_OPTION, END_DATE_OPTION]
209
+
210
+
211
+ def get_total_active_users(option_list: list):
212
+ start_date = None
213
+ end_date = None
214
+ for option_flag, option_arg in option_list:
215
+ if option_flag.name == "start_date":
216
+ start_date = option_arg
217
+ if option_flag.name == "end_date":
218
+ end_date = option_arg
219
+
220
+ if not start_date or not end_date:
221
+ start_date, end_date = get_default_date_range()
222
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
223
+
224
+ manager = AnalyticsManager()
225
+ result = manager.get_total_active_users(start_date, end_date)
226
+ Console.write_stdout(f"Total active users: {result.totalActiveUsers}")
227
+
228
+
229
+ active_users_options = [START_DATE_OPTION, END_DATE_OPTION]
230
+
231
+
232
+ def get_full_report(option_list: list):
233
+ start_date = None
234
+ end_date = None
235
+ csv_file = None
236
+ for option_flag, option_arg in option_list:
237
+ if option_flag.name == "start_date":
238
+ start_date = option_arg
239
+ if option_flag.name == "end_date":
240
+ end_date = option_arg
241
+ if option_flag.name == "csv_file":
242
+ csv_file = option_arg
243
+
244
+ if not start_date or not end_date:
245
+ start_date, end_date = get_default_date_range()
246
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
247
+
248
+ manager = AnalyticsManager()
249
+
250
+ Console.write_stdout(f"\n{'='*80}")
251
+ Console.write_stdout(f"ANALYTICS FULL REPORT - Period: {start_date} to {end_date}")
252
+ Console.write_stdout(f"{'='*80}\n")
253
+
254
+ report_data = {}
255
+
256
+ try:
257
+ Console.write_stdout("LAB METRICS")
258
+ Console.write_stdout("-" * 80)
259
+ agents_created = manager.get_agents_created_and_modified(start_date, end_date)
260
+ Console.write_stdout(f"Agents Created: {agents_created.createdAgents}")
261
+ Console.write_stdout(f"Agents Modified: {agents_created.modifiedAgents}")
262
+ report_data["Agents Created"] = agents_created.createdAgents
263
+ report_data["Agents Modified"] = agents_created.modifiedAgents
264
+ except Exception as e:
265
+ Console.write_stdout(f"Error retrieving agents data: {e}")
266
+
267
+ try:
268
+ flows_created = manager.get_flows_created_and_modified(start_date, end_date)
269
+ Console.write_stdout(f"Flows Created: {flows_created.createdFlows}")
270
+ Console.write_stdout(f"Flows Modified: {flows_created.modifiedFlows}")
271
+ report_data["Flows Created"] = flows_created.createdFlows
272
+ report_data["Flows Modified"] = flows_created.modifiedFlows
273
+ except Exception as e:
274
+ Console.write_stdout(f"Error retrieving flows data: {e}")
275
+
276
+ try:
277
+ processes_created = manager.get_processes_created_and_modified(start_date, end_date)
278
+ Console.write_stdout(f"Processes Created: {processes_created.createdProcesses}")
279
+ Console.write_stdout(f"Processes Modified: {processes_created.modifiedProcesses}")
280
+ report_data["Processes Created"] = processes_created.createdProcesses
281
+ report_data["Processes Modified"] = processes_created.modifiedProcesses
282
+ except Exception as e:
283
+ Console.write_stdout(f"Error retrieving processes data: {e}")
284
+
285
+ Console.write_stdout("\nREQUEST METRICS")
286
+ Console.write_stdout("-" * 80)
287
+
288
+ try:
289
+ total_requests = manager.get_total_requests(start_date, end_date)
290
+ Console.write_stdout(f"Total Requests: {total_requests.totalRequests}")
291
+ report_data["Total Requests"] = total_requests.totalRequests
292
+ except Exception as e:
293
+ Console.write_stdout(f"Error retrieving total requests: {e}")
294
+
295
+ try:
296
+ total_errors = manager.get_total_requests_with_error(start_date, end_date)
297
+ Console.write_stdout(f"Total Requests with Error: {total_errors.totalRequestsWithError}")
298
+ report_data["Total Requests with Error"] = total_errors.totalRequestsWithError
299
+ except Exception as e:
300
+ Console.write_stdout(f"Error retrieving error requests: {e}")
301
+
302
+ try:
303
+ error_rate = manager.get_overall_error_rate(start_date, end_date)
304
+ Console.write_stdout(f"Overall Error Rate: {error_rate.errorRate:.2%}")
305
+ report_data["Overall Error Rate (%)"] = f"{error_rate.errorRate:.2%}"
306
+ except Exception as e:
307
+ Console.write_stdout(f"Error retrieving error rate: {e}")
308
+
309
+ try:
310
+ avg_request_time = manager.get_average_request_time(start_date, end_date)
311
+ Console.write_stdout(f"Average Request Time: {avg_request_time.averageTime:.2f} ms")
312
+ report_data["Average Request Time (ms)"] = f"{avg_request_time.averageTime:.2f}"
313
+ except Exception as e:
314
+ Console.write_stdout(f"Error retrieving average request time: {e}")
315
+
316
+ Console.write_stdout("\nCOST METRICS")
317
+ Console.write_stdout("-" * 80)
318
+
319
+ try:
320
+ total_cost = manager.get_total_cost(start_date, end_date)
321
+ Console.write_stdout(f"Total Cost: ${total_cost.totalCost:.2f}")
322
+ report_data["Total Cost (USD)"] = f"{total_cost.totalCost:.2f}"
323
+ except Exception as e:
324
+ Console.write_stdout(f"Error retrieving total cost: {e}")
325
+
326
+ try:
327
+ avg_cost = manager.get_average_cost_per_request(start_date, end_date)
328
+ Console.write_stdout(f"Average Cost per Request: ${avg_cost.averageCost:.4f}")
329
+ report_data["Average Cost per Request (USD)"] = f"{avg_cost.averageCost:.4f}"
330
+ except Exception as e:
331
+ Console.write_stdout(f"Error retrieving average cost: {e}")
332
+
333
+ Console.write_stdout("\nTOKEN METRICS")
334
+ Console.write_stdout("-" * 80)
335
+
336
+ try:
337
+ total_tokens = manager.get_total_tokens(start_date, end_date)
338
+ Console.write_stdout(f"Total Input Tokens: {total_tokens.totalInputTokens}")
339
+ Console.write_stdout(f"Total Output Tokens: {total_tokens.totalOutputTokens}")
340
+ Console.write_stdout(f"Total Tokens: {total_tokens.totalTokens}")
341
+ report_data["Total Input Tokens"] = total_tokens.totalInputTokens
342
+ report_data["Total Output Tokens"] = total_tokens.totalOutputTokens
343
+ report_data["Total Tokens"] = total_tokens.totalTokens
344
+ except Exception as e:
345
+ Console.write_stdout(f"Error retrieving token data: {e}")
346
+
347
+ try:
348
+ avg_tokens = manager.get_average_tokens_per_request(start_date, end_date)
349
+ Console.write_stdout(f"Average Input Tokens per Request: {avg_tokens.averageInputTokens:.2f}")
350
+ Console.write_stdout(f"Average Output Tokens per Request: {avg_tokens.averageOutputTokens:.2f}")
351
+ Console.write_stdout(f"Average Total Tokens per Request: {avg_tokens.averageTotalTokens:.2f}")
352
+ report_data["Average Input Tokens per Request"] = f"{avg_tokens.averageInputTokens:.2f}"
353
+ report_data["Average Output Tokens per Request"] = f"{avg_tokens.averageOutputTokens:.2f}"
354
+ report_data["Average Total Tokens per Request"] = f"{avg_tokens.averageTotalTokens:.2f}"
355
+ except Exception as e:
356
+ Console.write_stdout(f"Error retrieving average tokens: {e}")
357
+
358
+ Console.write_stdout("\nUSER & AGENT METRICS")
359
+ Console.write_stdout("-" * 80)
360
+
361
+ try:
362
+ active_users = manager.get_total_active_users(start_date, end_date)
363
+ Console.write_stdout(f"Total Active Users: {active_users.totalActiveUsers}")
364
+ report_data["Total Active Users"] = active_users.totalActiveUsers
365
+ except Exception as e:
366
+ Console.write_stdout(f"Error retrieving active users: {e}")
367
+
368
+ try:
369
+ active_agents = manager.get_total_active_agents(start_date, end_date)
370
+ Console.write_stdout(f"Total Active Agents: {active_agents.totalActiveAgents}")
371
+ report_data["Total Active Agents"] = active_agents.totalActiveAgents
372
+ except Exception as e:
373
+ Console.write_stdout(f"Error retrieving active agents: {e}")
374
+
375
+ try:
376
+ active_projects = manager.get_total_active_projects(start_date, end_date)
377
+ Console.write_stdout(f"Total Active Projects: {active_projects.totalActiveProjects}")
378
+ report_data["Total Active Projects"] = active_projects.totalActiveProjects
379
+ except Exception as e:
380
+ Console.write_stdout(f"Error retrieving active projects: {e}")
381
+
382
+ Console.write_stdout("\nTOP 10 AGENTS BY REQUESTS")
383
+ Console.write_stdout("-" * 80)
384
+
385
+ try:
386
+ top_agents_requests = manager.get_top_10_agents_by_requests(start_date, end_date)
387
+ for idx, agent in enumerate(top_agents_requests.topAgents, 1):
388
+ Console.write_stdout(f"{idx}. {agent.agentName}: {agent.totalRequests} requests")
389
+ except Exception as e:
390
+ Console.write_stdout(f"Error retrieving top agents by requests: {e}")
391
+
392
+ Console.write_stdout("\nTOP 10 AGENTS BY TOKENS")
393
+ Console.write_stdout("-" * 80)
394
+
395
+ try:
396
+ top_agents_tokens = manager.get_top_10_agents_by_tokens(start_date, end_date)
397
+ for idx, agent in enumerate(top_agents_tokens.topAgents, 1):
398
+ Console.write_stdout(f"{idx}. {agent.agentName}: {agent.totalTokens} tokens")
399
+ except Exception as e:
400
+ Console.write_stdout(f"Error retrieving top agents by tokens: {e}")
401
+
402
+ Console.write_stdout("\nTOP 10 USERS BY REQUESTS")
403
+ Console.write_stdout("-" * 80)
404
+
405
+ try:
406
+ top_users_requests = manager.get_top_10_users_by_requests(start_date, end_date)
407
+ for idx, user in enumerate(top_users_requests.topUsers, 1):
408
+ Console.write_stdout(f"{idx}. {user.userEmail}: {user.totalRequests} requests")
409
+ except Exception as e:
410
+ Console.write_stdout(f"Error retrieving top users by requests: {e}")
411
+
412
+ Console.write_stdout("\nTOP 10 USERS BY COST")
413
+ Console.write_stdout("-" * 80)
414
+
415
+ try:
416
+ top_users_cost = manager.get_top_10_users_by_cost(start_date, end_date)
417
+ for idx, user in enumerate(top_users_cost.topUsers, 1):
418
+ Console.write_stdout(f"{idx}. {user.userEmail}: ${user.totalCost:.2f}")
419
+ except Exception as e:
420
+ Console.write_stdout(f"Error retrieving top users by cost: {e}")
421
+
422
+ Console.write_stdout(f"\n{'='*80}\n")
423
+
424
+ if csv_file:
425
+ try:
426
+ with open(csv_file, 'w', newline='') as f:
427
+ writer = csv.writer(f)
428
+ writer.writerow(['Metric', 'Value'])
429
+ writer.writerow(['Report Period', f"{start_date} to {end_date}"])
430
+ writer.writerow(['Generated At', datetime.now().strftime('%Y-%m-%d %H:%M:%S')])
431
+ writer.writerow([])
432
+ for key, value in report_data.items():
433
+ writer.writerow([key, value])
434
+ Console.write_stdout(f"Report exported to: {csv_file}")
435
+ except Exception as e:
436
+ Console.write_stdout(f"Error exporting to CSV: {e}")
437
+
438
+
439
+ full_report_options = [START_DATE_OPTION, END_DATE_OPTION, CSV_EXPORT_OPTION]
440
+
441
+
442
+ analytics_commands = [
443
+ Command(
444
+ "help",
445
+ ["help", "h"],
446
+ "Display analytics help text",
447
+ show_help,
448
+ ArgumentsEnum.NOT_AVAILABLE,
449
+ [],
450
+ []
451
+ ),
452
+ Command(
453
+ "agents_created",
454
+ ["agents-created", "ac"],
455
+ "Get total agents created and modified",
456
+ get_agents_created_and_modified,
457
+ ArgumentsEnum.OPTIONAL,
458
+ [],
459
+ agents_created_options
460
+ ),
461
+ Command(
462
+ "requests_per_day",
463
+ ["requests-per-day", "rpd"],
464
+ "Get total requests per day",
465
+ get_total_requests_per_day,
466
+ ArgumentsEnum.OPTIONAL,
467
+ [],
468
+ total_requests_per_day_options
469
+ ),
470
+ Command(
471
+ "total_cost",
472
+ ["total-cost", "tc"],
473
+ "Get total cost for the period",
474
+ get_total_cost,
475
+ ArgumentsEnum.OPTIONAL,
476
+ [],
477
+ total_cost_options
478
+ ),
479
+ Command(
480
+ "average_cost",
481
+ ["average-cost", "ac"],
482
+ "Get average cost per request",
483
+ get_average_cost_per_request,
484
+ ArgumentsEnum.OPTIONAL,
485
+ [],
486
+ average_cost_per_request_options
487
+ ),
488
+ Command(
489
+ "total_tokens",
490
+ ["total-tokens", "tt"],
491
+ "Get total tokens consumed",
492
+ get_total_tokens,
493
+ ArgumentsEnum.OPTIONAL,
494
+ [],
495
+ total_tokens_options
496
+ ),
497
+ Command(
498
+ "error_rate",
499
+ ["error-rate", "er"],
500
+ "Get overall error rate",
501
+ get_overall_error_rate,
502
+ ArgumentsEnum.OPTIONAL,
503
+ [],
504
+ error_rate_options
505
+ ),
506
+ Command(
507
+ "top_agents",
508
+ ["top-agents", "ta"],
509
+ "Get top 10 agents by requests",
510
+ get_top_agents_by_requests,
511
+ ArgumentsEnum.OPTIONAL,
512
+ [],
513
+ top_agents_options
514
+ ),
515
+ Command(
516
+ "active_users",
517
+ ["active-users", "au"],
518
+ "Get total active users",
519
+ get_total_active_users,
520
+ ArgumentsEnum.OPTIONAL,
521
+ [],
522
+ active_users_options
523
+ ),
524
+ Command(
525
+ "full_report",
526
+ ["full-report", "fr"],
527
+ "Get comprehensive analytics report",
528
+ get_full_report,
529
+ ArgumentsEnum.OPTIONAL,
530
+ [],
531
+ full_report_options
532
+ ),
533
+ ]
@@ -1,5 +1,4 @@
1
1
  import json
2
- import sys
3
2
 
4
3
  from pygeai.assistant.clients import AssistantClient
5
4
  from pygeai.cli.commands import Command, Option, ArgumentsEnum
@@ -8,6 +7,7 @@ from pygeai.cli.commands.common import get_llm_settings, get_welcome_data, get_m
8
7
  get_welcome_data_example_prompt
9
8
  from pygeai.cli.texts.help import ASSISTANT_HELP_TEXT
10
9
  from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
10
+ from pygeai.core.utils.console import Console
11
11
 
12
12
 
13
13
  def show_help():
@@ -15,7 +15,7 @@ def show_help():
15
15
  Displays help text in stdout
16
16
  """
17
17
  help_text = build_help_text(assistant_commands, ASSISTANT_HELP_TEXT)
18
- sys.stdout.write(help_text)
18
+ Console.write_stdout(help_text)
19
19
 
20
20
 
21
21
  def get_assistant_detail(option_list: list):
@@ -32,7 +32,7 @@ def get_assistant_detail(option_list: list):
32
32
 
33
33
  client = AssistantClient()
34
34
  result = client.get_assistant_data(assistant_id, detail)
35
- sys.stdout.write(f"Assistant detail: \n{result}\n")
35
+ Console.write_stdout(f"Assistant detail: \n{result}")
36
36
 
37
37
 
38
38
  assistant_detail_options = [
@@ -121,7 +121,7 @@ def create_assistant(option_list: list):
121
121
  llm_settings=llm_settings,
122
122
  welcome_data=welcome_data
123
123
  )
124
- sys.stdout.write(f"New assistant detail: \n{result}\n")
124
+ Console.write_stdout(f"New assistant detail: \n{result}")
125
125
 
126
126
 
127
127
  create_assistant_options = [
@@ -287,7 +287,7 @@ def update_assistant(option_list: list):
287
287
  llm_settings=llm_settings,
288
288
  welcome_data=welcome_data
289
289
  )
290
- sys.stdout.write(f"Updated assistant detail: \n{result}\n")
290
+ Console.write_stdout(f"Updated assistant detail: \n{result}")
291
291
 
292
292
 
293
293
  update_assistant_options = [
@@ -401,7 +401,7 @@ def delete_assistant(option_list: list):
401
401
  result = client.delete_assistant(
402
402
  assistant_id=assistant_id,
403
403
  )
404
- sys.stdout.write(f"Deleted assistant: \n{result}\n")
404
+ Console.write_stdout(f"Deleted assistant: \n{result}")
405
405
 
406
406
 
407
407
  delete_assistant_options = [
@@ -454,7 +454,7 @@ def send_chat_request(option_list: list):
454
454
  revision=revision,
455
455
  revision_name=revision_name
456
456
  )
457
- sys.stdout.write(f"Chat request response: \n{result}\n")
457
+ Console.write_stdout(f"Chat request response: \n{result}")
458
458
 
459
459
 
460
460
  send_chat_request_options = [
@@ -503,7 +503,7 @@ def get_request_status(option_list: list):
503
503
 
504
504
  client = AssistantClient()
505
505
  result = client.get_request_status(request_id)
506
- sys.stdout.write(f"Request status: \n{result}\n")
506
+ Console.write_stdout(f"Request status: \n{result}")
507
507
 
508
508
 
509
509
  request_status_options = [
@@ -527,7 +527,7 @@ def cancel_request(option_list: list):
527
527
 
528
528
  client = AssistantClient()
529
529
  result = client.cancel_request(request_id)
530
- sys.stdout.write(f"Cancel request detail: \n{result}\n")
530
+ Console.write_stdout(f"Cancel request detail: \n{result}")
531
531
 
532
532
 
533
533
  cancel_request_options = [