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.
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,5 +1,5 @@
1
1
  from typing import Any
2
- import sys
2
+ from pygeai import logger
3
3
  from pygeai.assistant.clients import AssistantClient
4
4
  from pygeai.assistant.rag.clients import RAGAssistantClient
5
5
  from pygeai.assistant.rag.mappers import RAGAssistantMapper
@@ -15,12 +15,12 @@ from pygeai.core.feedback.models import FeedbackRequest
15
15
  from pygeai.core.responses import NewAssistantResponse, ChatResponse
16
16
  from pygeai.chat.clients import ChatClient
17
17
  from pygeai.assistant.rag.models import RAGAssistant, Document, UploadDocument
18
- from pygeai.core.common.exceptions import MissingRequirementException
18
+ from pygeai.core.common.exceptions import MissingRequirementException, APIError
19
19
 
20
20
 
21
21
  class AssistantManager:
22
22
 
23
- def __init__(self, api_key: str = None, base_url: str = None, alias: str = "default"):
23
+ def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
24
24
  self.__assistant_client = AssistantClient(api_key, base_url, alias)
25
25
  self.__chat_client = ChatClient(api_key, base_url, alias)
26
26
  self.__rag_client = RAGAssistantClient(api_key, base_url, alias)
@@ -68,25 +68,25 @@ class AssistantManager:
68
68
  Retrieves detailed data for a specific assistant.
69
69
 
70
70
  This method calls `AssistantClient.get_assistant_data` to fetch assistant details
71
- and maps the response using `AssistantResponseMapper.map_to_assistant_list_response`.
72
-
73
- If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
71
+ and maps the response using `AssistantResponseMapper.map_to_assistant_response`.
74
72
 
75
73
  :param assistant_id: str - The unique identifier of the assistant to retrieve.
76
74
  :param detail: str, optional - The level of detail to include in the response. Possible values:
77
75
  - "summary": Provides a summarized response. (Default)
78
76
  - "full": Provides detailed assistant data.
79
- :return: AssistantResponse - The mapped response containing assistant details or an error list.
77
+ :return: Assistant - The mapped response containing assistant details.
78
+ :raises APIError: If the API returns errors.
80
79
  """
81
80
  response_data = self.__assistant_client.get_assistant_data(
82
81
  assistant_id=assistant_id,
83
82
  detail=detail
84
83
  )
85
84
  if ErrorHandler.has_errors(response_data):
86
- result = ErrorHandler.extract_error(response_data)
87
- else:
88
- result = AssistantResponseMapper.map_to_assistant_response(response_data)
85
+ error = ErrorHandler.extract_error(response_data)
86
+ logger.error(f"Error received while retrieving assistant data by ID: {error}")
87
+ raise APIError(f"Error received while retrieving assistant data by ID: {error}")
89
88
 
89
+ result = AssistantResponseMapper.map_to_assistant_response(response_data)
90
90
  return result
91
91
 
92
92
  def _get_assistant_data_by_name(self, assistant_name: str) -> RAGAssistant:
@@ -96,19 +96,19 @@ class AssistantManager:
96
96
  This method calls `RAGAssistantClient.get_assistant_data` to fetch assistant details
97
97
  and maps the response using `RAGAssistantMapper.map_to_rag_assistant`.
98
98
 
99
- If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
100
-
101
99
  :param assistant_name: str - The name of the assistant to retrieve.
102
- :return: RAGAssistant - The mapped response containing assistant details or an error list.
100
+ :return: RAGAssistant - The mapped response containing assistant details.
101
+ :raises APIError: If the API returns errors.
103
102
  """
104
103
  response_data = self.__rag_client.get_assistant_data(
105
104
  name=assistant_name
106
105
  )
107
106
  if ErrorHandler.has_errors(response_data):
108
- result = ErrorHandler.extract_error(response_data)
109
- else:
110
- result = RAGAssistantMapper.map_to_rag_assistant(response_data)
107
+ error = ErrorHandler.extract_error(response_data)
108
+ logger.error(f"Error received while retrieving assistant data by name: {error}")
109
+ raise APIError(f"Error received while retrieving assistant data by name: {error}")
111
110
 
111
+ result = RAGAssistantMapper.map_to_rag_assistant(response_data)
112
112
  return result
113
113
 
114
114
  def create_assistant(
@@ -141,26 +141,46 @@ class AssistantManager:
141
141
  self,
142
142
  assistant: Assistant
143
143
  ) -> NewAssistantResponse:
144
+ """
145
+ Creates a new chat assistant.
146
+
147
+ This method calls `AssistantClient.create_assistant` to create a new assistant
148
+ and maps the response using `AssistantResponseMapper.map_to_assistant_created_response`.
149
+
150
+ :param assistant: Assistant - The assistant instance to be created.
151
+ :return: NewAssistantResponse - The mapped response containing the created assistant details.
152
+ :raises APIError: If the API returns errors.
153
+ """
144
154
  response_data = self.__assistant_client.create_assistant(
145
155
  assistant_type=assistant.type,
146
156
  name=assistant.name,
147
157
  prompt=assistant.prompt,
148
158
  description=assistant.description,
149
- llm_settings=assistant.llm_settings.to_dict(),
150
- welcome_data=assistant.welcome_data.to_dict()
159
+ llm_settings=assistant.llm_settings.to_dict() if assistant.llm_settings else None,
160
+ welcome_data=assistant.welcome_data.to_dict() if assistant.welcome_data else None
151
161
  )
152
162
  if ErrorHandler.has_errors(response_data):
153
- result = ErrorHandler.extract_error(response_data)
154
- else:
155
- result = AssistantResponseMapper.map_to_assistant_created_response(response_data)
163
+ error = ErrorHandler.extract_error(response_data)
164
+ logger.error(f"Error received while creating chat assistant: {error}")
165
+ raise APIError(f"Error received while creating chat assistant: {error}")
156
166
 
167
+ result = AssistantResponseMapper.map_to_assistant_created_response(response_data)
157
168
  return result
158
169
 
159
170
  def _create_rag_assistant(
160
171
  self,
161
172
  assistant: RAGAssistant
162
173
  ) -> RAGAssistant:
174
+ """
175
+ Creates a new RAG assistant.
176
+
177
+ This method calls `RAGAssistantClient.create_assistant` to create a new assistant
178
+ and maps the response using `RAGAssistantMapper.map_to_rag_assistant`.
163
179
 
180
+ :param assistant: RAGAssistant - The assistant instance to be created.
181
+ :return: RAGAssistant - The mapped response containing the created assistant details.
182
+ :raises APIError: If the API returns errors.
183
+ """
164
184
  response_data = self.__rag_client.create_assistant(
165
185
  name=assistant.name,
166
186
  description=assistant.description,
@@ -170,16 +190,27 @@ class AssistantManager:
170
190
  welcome_data=assistant.welcome_data.to_dict() if assistant.welcome_data else None
171
191
  )
172
192
  if ErrorHandler.has_errors(response_data):
173
- result = ErrorHandler.extract_error(response_data)
174
- else:
175
- result = RAGAssistantMapper.map_to_rag_assistant(response_data)
193
+ error = ErrorHandler.extract_error(response_data)
194
+ logger.error(f"Error received while creating RAG assistant: {error}")
195
+ raise APIError(f"Error received while creating RAG assistant: {error}")
176
196
 
197
+ result = RAGAssistantMapper.map_to_rag_assistant(response_data)
177
198
  return result
178
199
 
179
200
  def _create_chat_with_data_assistant(
180
201
  self,
181
202
  assistant: ChatWithDataAssistant
182
203
  ) -> NewAssistantResponse:
204
+ """
205
+ Creates a new chat with data assistant.
206
+
207
+ This method calls `AssistantClient.create_assistant` to create a new assistant
208
+ and maps the response using `AssistantResponseMapper.map_to_assistant_created_response`.
209
+
210
+ :param assistant: ChatWithDataAssistant - The assistant instance to be created.
211
+ :return: NewAssistantResponse - The mapped response containing the created assistant details.
212
+ :raises APIError: If the API returns errors.
213
+ """
183
214
  response_data = self.__assistant_client.create_assistant(
184
215
  assistant_type=assistant.type,
185
216
  name=assistant.name,
@@ -189,10 +220,11 @@ class AssistantManager:
189
220
  welcome_data=assistant.welcome_data.to_dict()
190
221
  )
191
222
  if ErrorHandler.has_errors(response_data):
192
- result = ErrorHandler.extract_error(response_data)
193
- else:
194
- result = AssistantResponseMapper.map_to_assistant_created_response(response_data)
223
+ error = ErrorHandler.extract_error(response_data)
224
+ logger.error(f"Error received while creating chat with data assistant: {error}")
225
+ raise APIError(f"Error received while creating chat with data assistant: {error}")
195
226
 
227
+ result = AssistantResponseMapper.map_to_assistant_created_response(response_data)
196
228
  return result
197
229
 
198
230
  def update_assistant(
@@ -202,25 +234,25 @@ class AssistantManager:
202
234
  revision_id: str = None
203
235
  ) -> Any:
204
236
  """
205
- Updates an assistant based on its type.
206
-
207
- This method determines the assistant type and delegates the update process accordingly:
208
- - Calls `_update_chat_assistant` for `TextAssistant` or `ChatAssistant`.
209
- - Calls `_update_rag_assistant` for `RAGAssistant`.
210
-
211
- :param assistant: Assistant - The assistant instance to be updated.
212
- :param action: str, optional - The type of update action for chat-based assistants. Options:
213
- - "save": Updates an existing revision (requires `revision_id`).
214
- - "saveNewRevision" (default): Creates and saves a new revision.
215
- - "savePublishNewRevision": Creates, saves, and publishes a new revision.
216
- :param revision_id: str, optional - The ID of the existing revision to update.
217
- Required if `action` is "save". Must be None for "saveNewRevision" or "savePublishNewRevision".
218
- :return: Any - The updated assistant instance or an error response if the update fails.
219
- :raises ValueError: If `action` is not a valid option.
220
- :raises MissingRequirementException:
221
- - If `action` is "save" and `revision_id` is not provided.
222
- - If `revision_id` is provided for "saveNewRevision" or "savePublishNewRevision".
223
- """
237
+ Updates an assistant based on its type.
238
+
239
+ This method determines the assistant type and delegates the update process accordingly:
240
+ - Calls `_update_chat_assistant` for `TextAssistant` or `ChatAssistant`.
241
+ - Calls `_update_rag_assistant` for `RAGAssistant`.
242
+
243
+ :param assistant: Assistant - The assistant instance to be updated.
244
+ :param action: str, optional - The type of update action for chat-based assistants. Options:
245
+ - "save": Updates an existing revision (requires `revision_id`).
246
+ - "saveNewRevision" (default): Creates and saves a new revision.
247
+ - "savePublishNewRevision": Creates, saves, and publishes a new revision.
248
+ :param revision_id: str, optional - The ID of the existing revision to update.
249
+ Required if `action` is "save". Must be None for "saveNewRevision" or "savePublishNewRevision".
250
+ :return: Any - The updated assistant instance or an error response if the update fails.
251
+ :raises ValueError: If `action` is not a valid option.
252
+ :raises MissingRequirementException:
253
+ - If `action` is "save" and `revision_id` is not provided.
254
+ - If `revision_id` is provided for "saveNewRevision" or "savePublishNewRevision".
255
+ """
224
256
  if isinstance(assistant, TextAssistant) or isinstance(assistant, ChatAssistant):
225
257
  return self._update_chat_assistant(assistant=assistant, action=action, revision_id=revision_id)
226
258
  elif isinstance(assistant, RAGAssistant):
@@ -229,16 +261,14 @@ class AssistantManager:
229
261
  def _update_chat_assistant(
230
262
  self,
231
263
  assistant: Assistant,
232
- action: str = "saveNewRevision", # "save", "saveNewRevision", "savePublishNewRevision"
264
+ action: str = "saveNewRevision",
233
265
  revision_id: str = None
234
266
  ) -> NewAssistantResponse:
235
267
  """
236
268
  Updates an assistant with a specified action.
237
269
 
238
- This method calls `AssistantClient.update_assistant` to update the assistant and maps the response
239
- using `AssistantResponseMapper.map_to_assistant_created_response`.
240
-
241
- If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
270
+ This method calls `AssistantClient.update_assistant` to update the assistant
271
+ and maps the response using `AssistantResponseMapper.map_to_assistant_created_response`.
242
272
 
243
273
  :param assistant: Assistant - The assistant instance containing updated details.
244
274
  :param action: str - The type of update action. Options:
@@ -247,11 +277,12 @@ class AssistantManager:
247
277
  - "savePublishNewRevision": Creates, saves, and publishes a new revision.
248
278
  :param revision_id: str, optional - The ID of the existing revision to update.
249
279
  Required if `action` is "save". Must be None for "saveNewRevision" or "savePublishNewRevision".
250
- :return: NewAssistantResponse - A response object containing the updated assistant details or an error list if the request fails.
280
+ :return: NewAssistantResponse - A response object containing the updated assistant details.
251
281
  :raises ValueError: If `action` is not one of the valid options.
252
282
  :raises MissingRequirementException:
253
283
  - If `action` is "save" and `revision_id` is not provided.
254
284
  - If `revision_id` is provided for "saveNewRevision" or "savePublishNewRevision".
285
+ :raises APIError: If the API returns errors.
255
286
  """
256
287
  if action not in ["save", "saveNewRevision", "savePublishNewRevision"]:
257
288
  raise ValueError("Valid actions are: 'save', 'saveNewRevision', 'savePublishNewRevision'")
@@ -266,6 +297,11 @@ class AssistantManager:
266
297
  "Assistant prompt is required if revisionId is specified or in case of actions saveNewRevision and savePublishNewRevision"
267
298
  )
268
299
 
300
+ if not assistant.id:
301
+ raise MissingRequirementException(
302
+ "Assistant must have a valid ID in order to be able to be updated."
303
+ )
304
+
269
305
  response_data = self.__assistant_client.update_assistant(
270
306
  assistant_id=assistant.id,
271
307
  status=assistant.status,
@@ -274,15 +310,16 @@ class AssistantManager:
274
310
  name=assistant.name,
275
311
  prompt=assistant.prompt,
276
312
  description=assistant.description,
277
- llm_settings=assistant.llm_settings.to_dict(),
278
- welcome_data=assistant.welcome_data.to_dict()
313
+ llm_settings=assistant.llm_settings.to_dict() if assistant.llm_settings else None,
314
+ welcome_data=assistant.welcome_data.to_dict() if assistant.welcome_data else None
279
315
  )
280
316
 
281
317
  if ErrorHandler.has_errors(response_data):
282
- result = ErrorHandler.extract_error(response_data)
283
- else:
284
- result = AssistantResponseMapper.map_to_assistant_created_response(response_data)
318
+ error = ErrorHandler.extract_error(response_data)
319
+ logger.error(f"Error received while updating chat assistant: {error}")
320
+ raise APIError(f"Error received while updating chat assistant: {error}")
285
321
 
322
+ result = AssistantResponseMapper.map_to_assistant_created_response(response_data)
286
323
  return result
287
324
 
288
325
  def _update_rag_assistant(
@@ -292,14 +329,12 @@ class AssistantManager:
292
329
  """
293
330
  Updates an existing RAGAssistant instance.
294
331
 
295
- This method calls `RAGAssistantClient.update_assistant` to update the assistant details and maps the response
296
- using `RAGAssistantMapper.map_to_rag_assistant`.
297
-
298
- If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
332
+ This method calls `RAGAssistantClient.update_assistant` to update the assistant details
333
+ and maps the response using `RAGAssistantMapper.map_to_rag_assistant`.
299
334
 
300
335
  :param assistant: RAGAssistant - The assistant instance containing updated details.
301
- :return: RAGAssistant - The updated RAGAssistant instance if the update is successful, or an error-mapped response if the request fails.
302
- :raises Exception: If the update request encounters unexpected errors.
336
+ :return: RAGAssistant - The updated RAGAssistant instance.
337
+ :raises APIError: If the API returns errors.
303
338
  """
304
339
  response_data = self.__rag_client.update_assistant(
305
340
  name=assistant.name,
@@ -310,10 +345,11 @@ class AssistantManager:
310
345
  welcome_data=assistant.welcome_data.to_dict() if assistant.welcome_data else None
311
346
  )
312
347
  if ErrorHandler.has_errors(response_data):
313
- result = ErrorHandler.extract_error(response_data)
314
- else:
315
- result = RAGAssistantMapper.map_to_rag_assistant(response_data)
348
+ error = ErrorHandler.extract_error(response_data)
349
+ logger.error(f"Error received while updating RAG assistant: {error}")
350
+ raise APIError(f"Error received while updating RAG assistant: {error}")
316
351
 
352
+ result = RAGAssistantMapper.map_to_rag_assistant(response_data)
317
353
  return result
318
354
 
319
355
  def delete_assistant(
@@ -334,7 +370,7 @@ class AssistantManager:
334
370
  :param assistant_id: str, optional - The unique identifier of the assistant to delete.
335
371
  :param assistant_name: str, optional - The name of the assistant to delete.
336
372
  :raises MissingRequirementException: If neither `assistant_id` nor `assistant_name` is provided.
337
- :return: EmptyResponse - A response indicating success or an error list if the deletion fails.
373
+ :return: EmptyResponse - A response indicating success.
338
374
  """
339
375
  if not (assistant_id or assistant_name):
340
376
  raise MissingRequirementException("Cannot delete assistant without either assistant_id or assistant_name")
@@ -351,22 +387,22 @@ class AssistantManager:
351
387
  """
352
388
  Deletes an assistant by its unique identifier.
353
389
 
354
- This method calls `AssistantClient.delete_assistant` to remove an assistant and maps the response
355
- using `ResponseMapper.map_to_empty_response`.
356
-
357
- If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
390
+ This method calls `AssistantClient.delete_assistant` to remove an assistant
391
+ and maps the response using `ResponseMapper.map_to_empty_response`.
358
392
 
359
393
  :param assistant_id: str - The unique identifier of the assistant to be deleted.
360
- :return: EmptyResponse - An empty response indicating successful deletion or an error list if the request fails.
394
+ :return: EmptyResponse - An empty response indicating successful deletion.
395
+ :raises APIError: If the API returns errors.
361
396
  """
362
397
  response_data = self.__assistant_client.delete_assistant(
363
398
  assistant_id=assistant_id
364
399
  )
365
400
  if ErrorHandler.has_errors(response_data):
366
- result = ErrorHandler.extract_error(response_data)
367
- else:
368
- result = ResponseMapper.map_to_empty_response(response_data)
401
+ error = ErrorHandler.extract_error(response_data)
402
+ logger.error(f"Error received while deleting assistant by ID: {error}")
403
+ raise APIError(f"Error received while deleting assistant by ID: {error}")
369
404
 
405
+ result = ResponseMapper.map_to_empty_response(response_data or "Assistant deleted successfully")
370
406
  return result
371
407
 
372
408
  def _delete_assistant_by_name(
@@ -379,19 +415,19 @@ class AssistantManager:
379
415
  This method calls `RAGAssistantClient.delete_assistant` to remove the assistant
380
416
  and maps the response using `ResponseMapper.map_to_empty_response`.
381
417
 
382
- If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
383
-
384
418
  :param assistant_name: str - The name of the assistant to be deleted.
385
- :return: EmptyResponse - A response indicating success or an error list if the deletion fails.
419
+ :return: EmptyResponse - A response indicating success.
420
+ :raises APIError: If the API returns errors.
386
421
  """
387
422
  response_data = self.__rag_client.delete_assistant(
388
423
  name=assistant_name
389
424
  )
390
425
  if ErrorHandler.has_errors(response_data):
391
- result = ErrorHandler.extract_error(response_data)
392
- else:
393
- result = ResponseMapper.map_to_empty_response(response_data)
426
+ error = ErrorHandler.extract_error(response_data)
427
+ logger.error(f"Error received while deleting assistant by name: {error}")
428
+ raise APIError(f"Error received while deleting assistant by name: {error}")
394
429
 
430
+ result = ResponseMapper.map_to_empty_response(response_data or "Assistant deleted successfully")
395
431
  return result
396
432
 
397
433
  def send_chat_request(
@@ -405,16 +441,14 @@ class AssistantManager:
405
441
  Sends a chat request to the assistant and processes the response.
406
442
 
407
443
  This method sends a conversation request to an AI assistant, including a list of chat messages,
408
- an optional revision identifier, and optional chat variables. It then maps the response to
409
- either an error list or a structured chat response.
444
+ an optional revision identifier, and optional chat variables.
410
445
 
411
446
  :param assistant: Assistant - The assistant instance handling the request.
412
447
  :param messages: ChatMessageList - The list of messages forming the chat history.
413
448
  :param revision: AssistantRevision, optional - The assistant revision details (default: None).
414
449
  :param variables: ChatVariableList, optional - Additional variables for the chat request (default: None).
415
-
416
- :return: ChatResponse - The structured response from the assistant, either a chat response
417
- or an error list.
450
+ :return: ChatResponse - The structured response from the assistant.
451
+ :raises APIError: If the API returns errors.
418
452
  """
419
453
  response_data = self.__assistant_client.send_chat_request(
420
454
  assistant_name=assistant.name,
@@ -424,10 +458,11 @@ class AssistantManager:
424
458
  variables=variables.to_list() if variables else None
425
459
  )
426
460
  if ErrorHandler.has_errors(response_data):
427
- result = ErrorHandler.extract_error(response_data)
428
- else:
429
- result = AssistantResponseMapper.map_to_chat_request_response(response_data)
461
+ error = ErrorHandler.extract_error(response_data)
462
+ logger.error(f"Error received while sending chat request: {error}")
463
+ raise APIError(f"Error received while sending chat request: {error}")
430
464
 
465
+ result = AssistantResponseMapper.map_to_chat_request_response(response_data)
431
466
  return result
432
467
 
433
468
  def get_request_status(self, request_id: str) -> ChatResponse:
@@ -435,45 +470,42 @@ class AssistantManager:
435
470
  Retrieves the status of a chat request using the provided request ID.
436
471
 
437
472
  This method queries the assistant service to check the current status of a
438
- previously sent chat request. It then processes the response, mapping it to either
439
- a structured chat response or an error list if any issues are found.
473
+ previously sent chat request.
440
474
 
441
475
  :param request_id: str - The unique identifier of the chat request.
442
-
443
- :return: ChatResponse - The structured response containing the request status, or
444
- an error list if the request failed.
476
+ :return: ChatResponse - The structured response containing the request status.
477
+ :raises APIError: If the API returns errors.
445
478
  """
446
479
  response_data = self.__assistant_client.get_request_status(
447
480
  request_id=request_id
448
481
  )
449
482
  if ErrorHandler.has_errors(response_data):
450
- result = ErrorHandler.extract_error(response_data)
451
- else:
452
- result = AssistantResponseMapper.map_to_chat_request_response(response_data)
483
+ error = ErrorHandler.extract_error(response_data)
484
+ logger.error(f"Error received while retrieving request status: {error}")
485
+ raise APIError(f"Error received while retrieving request status: {error}")
453
486
 
487
+ result = AssistantResponseMapper.map_to_chat_request_response(response_data)
454
488
  return result
455
489
 
456
490
  def cancel_request(self, request_id: str) -> ChatResponse:
457
491
  """
458
492
  Cancels an ongoing chat request using the provided request ID.
459
493
 
460
- This method sends a cancellation request to the assistant service. If the request
461
- is successfully canceled, it returns a structured chat response. If there are
462
- errors, it maps them to an error list response.
494
+ This method sends a cancellation request to the assistant service.
463
495
 
464
496
  :param request_id: str - The unique identifier of the chat request to cancel.
465
-
466
- :return: ChatResponse - The structured response confirming the cancellation,
467
- or an error list if the cancellation fails.
497
+ :return: ChatResponse - The structured response confirming the cancellation.
498
+ :raises APIError: If the API returns errors.
468
499
  """
469
500
  response_data = self.__assistant_client.cancel_request(
470
501
  request_id=request_id
471
502
  )
472
503
  if ErrorHandler.has_errors(response_data):
473
- result = ErrorHandler.extract_error(response_data)
474
- else:
475
- result = AssistantResponseMapper.map_to_chat_request_response(response_data)
504
+ error = ErrorHandler.extract_error(response_data)
505
+ logger.error(f"Error received while canceling request: {error}")
506
+ raise APIError(f"Error received while canceling request: {error}")
476
507
 
508
+ result = AssistantResponseMapper.map_to_chat_request_response(response_data)
477
509
  return result
478
510
 
479
511
  def chat_completion(
@@ -485,13 +517,12 @@ class AssistantManager:
485
517
  variables: ChatVariableList = None,
486
518
  tool_choice: ToolChoice = None,
487
519
  tools: ChatToolList = None
488
- ):
520
+ ) -> ChatResponse:
489
521
  """
490
522
  Generates a chat completion response using the specified language model.
491
523
 
492
524
  This method sends a chat completion request to the ChatClient with the provided
493
- model, messages, and settings. It processes the response by mapping errors if
494
- present or converting it into an assistant response format.
525
+ model, messages, and settings.
495
526
 
496
527
  :param model: str - The identifier of the language model to use.
497
528
  :param messages: ChatMessageList - A list of chat messages to provide context for the completion.
@@ -501,9 +532,8 @@ class AssistantManager:
501
532
  :param variables: ChatVariableList, optional - Additional variables to include in the request.
502
533
  :param tool_choice: ToolChoice, optional - Indicates which tool to call.
503
534
  :param tools: ChatToolList, optional - Additional tools the model may call
504
-
505
- :return: ChatResponse - The structured chat response if successful,
506
- or an error list if an issue occurs.
535
+ :return: ChatResponse - The structured chat response.
536
+ :raises APIError: If the API returns errors.
507
537
  """
508
538
  response_data = self.__chat_client.chat_completion(
509
539
  model=model,
@@ -520,10 +550,11 @@ class AssistantManager:
520
550
  )
521
551
 
522
552
  if ErrorHandler.has_errors(response_data):
523
- result = ErrorHandler.extract_error(response_data)
524
- else:
525
- result = AssistantResponseMapper.map_to_provider_response(response_data)
553
+ error = ErrorHandler.extract_error(response_data)
554
+ logger.error(f"Error received while generating chat completion: {error}")
555
+ raise APIError(f"Error received while generating chat completion: {error}")
526
556
 
557
+ result = AssistantResponseMapper.map_to_provider_response(response_data)
527
558
  return result
528
559
 
529
560
  def get_document_list(
@@ -535,13 +566,14 @@ class AssistantManager:
535
566
  """
536
567
  Retrieves a list of documents associated with a specified RAG assistant.
537
568
 
569
+ This method queries the RAG client to fetch a list of documents for the given assistant name,
570
+ applying pagination parameters.
571
+
538
572
  :param name: str - The name of the RAG assistant.
539
573
  :param skip: int - The number of documents to skip (default: 0).
540
574
  :param count: int - The number of documents to retrieve (default: 10).
541
-
542
- :return: DocumentListResponse - A response object containing the retrieved documents or an error response.
543
-
544
- :raises Exception: If the API call encounters errors, they will be mapped using ErrorMapper.
575
+ :return: DocumentListResponse - A response object containing the retrieved documents.
576
+ :raises APIError: If the API returns errors.
545
577
  """
546
578
  response_data = self.__rag_client.get_documents(
547
579
  name=name,
@@ -550,10 +582,11 @@ class AssistantManager:
550
582
  )
551
583
 
552
584
  if ErrorHandler.has_errors(response_data):
553
- result = ErrorHandler.extract_error(response_data)
554
- else:
555
- result = RAGAssistantMapper.map_to_document_list_response(response_data)
585
+ error = ErrorHandler.extract_error(response_data)
586
+ logger.error(f"Error received while retrieving document list: {error}")
587
+ raise APIError(f"Error received while retrieving document list: {error}")
556
588
 
589
+ result = RAGAssistantMapper.map_to_document_list_response(response_data)
557
590
  return result
558
591
 
559
592
  def delete_all_documents(
@@ -563,21 +596,22 @@ class AssistantManager:
563
596
  """
564
597
  Deletes all documents associated with a specified RAG assistant.
565
598
 
566
- :param name: str - The name of the RAG assistant whose documents should be deleted.
567
-
568
- :return: EmptyResponse - A response object indicating the success or failure of the operation.
599
+ This method sends a request to the RAG client to delete all documents for the given assistant name.
569
600
 
570
- :raises Exception: If the API call encounters errors, they will be mapped using ErrorMapper.
601
+ :param name: str - The name of the RAG assistant whose documents should be deleted.
602
+ :return: EmptyResponse - A response object indicating the success of the operation.
603
+ :raises APIError: If the API returns errors.
571
604
  """
572
605
  response_data = self.__rag_client.delete_all_documents(
573
606
  name=name
574
607
  )
575
608
 
576
609
  if ErrorHandler.has_errors(response_data):
577
- result = ErrorHandler.extract_error(response_data)
578
- else:
579
- result = ResponseMapper.map_to_empty_response(response_data)
610
+ error = ErrorHandler.extract_error(response_data)
611
+ logger.error(f"Error received while deleting all documents: {error}")
612
+ raise APIError(f"Error received while deleting all documents: {error}")
580
613
 
614
+ result = ResponseMapper.map_to_empty_response(response_data or "All documents deleted successfully")
581
615
  return result
582
616
 
583
617
  def get_document(
@@ -588,12 +622,13 @@ class AssistantManager:
588
622
  """
589
623
  Retrieves a specific document associated with a RAG assistant.
590
624
 
625
+ This method sends a request to the RAG client to retrieve a document identified by its ID
626
+ for the given assistant name.
627
+
591
628
  :param name: str - The name of the RAG assistant.
592
629
  :param document_id: str - The unique identifier of the document to retrieve.
593
-
594
- :return: DocumentResponse - A response object containing the retrieved document or an error response.
595
-
596
- :raises Exception: If the API call encounters errors, they will be mapped using ErrorMapper.
630
+ :return: Document - The retrieved document instance.
631
+ :raises APIError: If the API returns errors.
597
632
  """
598
633
  response_data = self.__rag_client.retrieve_document(
599
634
  name=name,
@@ -601,10 +636,11 @@ class AssistantManager:
601
636
  )
602
637
 
603
638
  if ErrorHandler.has_errors(response_data):
604
- result = ErrorHandler.extract_error(response_data)
605
- else:
606
- result = RAGAssistantMapper.map_to_document(response_data)
639
+ error = ErrorHandler.extract_error(response_data)
640
+ logger.error(f"Error received while retrieving document: {error}")
641
+ raise APIError(f"Error received while retrieving document: {error}")
607
642
 
643
+ result = RAGAssistantMapper.map_to_document(response_data)
608
644
  return result
609
645
 
610
646
  def upload_document(
@@ -615,16 +651,16 @@ class AssistantManager:
615
651
  """
616
652
  Uploads a document to the specified RAG assistant.
617
653
 
654
+ This method sends a request to the RAG client to upload a document for the given assistant.
655
+
618
656
  :param assistant: RAGAssistant - The assistant to which the document will be uploaded.
619
657
  :param document: UploadDocument - The document object containing:
620
658
  - path (str): The file path of the document.
621
659
  - upload_type (str): The type of upload (e.g., "multipart" or "binary").
622
660
  - metadata (dict | str | None): Additional metadata, either as a dictionary or a file path.
623
661
  - content_type (str): The MIME type of the document (e.g., "application/pdf", "text/plain").
624
-
625
662
  :return: Document - The uploaded document instance.
626
-
627
- :raises ValueError: If an error occurs during the upload, it is mapped using ErrorMapper.
663
+ :raises APIError: If the API returns errors.
628
664
  """
629
665
  response_data = self.__rag_client.upload_document(
630
666
  name=assistant.name,
@@ -635,10 +671,11 @@ class AssistantManager:
635
671
  )
636
672
 
637
673
  if ErrorHandler.has_errors(response_data):
638
- result = ErrorHandler.extract_error(response_data)
639
- else:
640
- result = RAGAssistantMapper.map_to_document(response_data)
674
+ error = ErrorHandler.extract_error(response_data)
675
+ logger.error(f"Error received while uploading document: {error}")
676
+ raise APIError(f"Error received while uploading document: {error}")
641
677
 
678
+ result = RAGAssistantMapper.map_to_document(response_data)
642
679
  return result
643
680
 
644
681
  def delete_document(
@@ -649,12 +686,13 @@ class AssistantManager:
649
686
  """
650
687
  Deletes a specific document from the given RAG assistant.
651
688
 
689
+ This method sends a request to the RAG client to delete a document identified by its ID
690
+ for the given assistant name.
691
+
652
692
  :param name: str - The name of the RAG assistant from which the document will be deleted.
653
693
  :param document_id: str - The unique identifier of the document to be deleted.
654
-
655
- :return: EmptyResponse - An empty response object indicating success or failure.
656
-
657
- :raises ValueError: If an error occurs during deletion, it is mapped using ErrorMapper.
694
+ :return: EmptyResponse - An empty response object indicating success.
695
+ :raises APIError: If the API returns errors.
658
696
  """
659
697
  response_data = self.__rag_client.delete_document(
660
698
  name=name,
@@ -662,10 +700,11 @@ class AssistantManager:
662
700
  )
663
701
 
664
702
  if ErrorHandler.has_errors(response_data):
665
- result = ErrorHandler.extract_error(response_data)
666
- else:
667
- result = ResponseMapper.map_to_empty_response(response_data)
703
+ error = ErrorHandler.extract_error(response_data)
704
+ logger.error(f"Error received while deleting document: {error}")
705
+ raise APIError(f"Error received while deleting document: {error}")
668
706
 
707
+ result = ResponseMapper.map_to_empty_response(response_data or "Document deleted successfully")
669
708
  return result
670
709
 
671
710
  def send_feedback(
@@ -676,14 +715,11 @@ class AssistantManager:
676
715
  Sends feedback for an assistant's response.
677
716
 
678
717
  This method submits user feedback to the Feedback API using the provided `FeedbackRequest` object.
679
- The feedback includes a request identifier, origin, answer score, and an optional comment.
680
- If the API response contains errors, they are processed and returned as an `ErrorListResponse`.
681
- Otherwise, an `EmptyResponse` is returned.
682
718
 
683
719
  :param feedback_request: FeedbackRequest - The feedback details, including request ID, origin,
684
720
  answer score, and optional comments.
685
- :return: EmptyResponse | ErrorListResponse - The processed API response. Returns an `EmptyResponse`
686
- if successful or an `ErrorListResponse` if errors occur.
721
+ :return: EmptyResponse - The processed API response indicating success.
722
+ :raises APIError: If the API returns errors.
687
723
  """
688
724
  response_data = self.__feedback_client.send_feedback(
689
725
  request_id=feedback_request.request_id,
@@ -693,8 +729,10 @@ class AssistantManager:
693
729
  )
694
730
 
695
731
  if ErrorHandler.has_errors(response_data):
696
- result = ErrorHandler.extract_error(response_data)
697
- else:
698
- result = ResponseMapper.map_to_empty_response(response_data)
732
+ error = ErrorHandler.extract_error(response_data)
733
+ logger.error(f"Error received while sending feedback: {error}")
734
+ raise APIError(f"Error received while sending feedback: {error}")
699
735
 
736
+ result = ResponseMapper.map_to_empty_response(response_data or "Feedback sent successfully")
700
737
  return result
738
+